﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
27747	Add signals for Django management commands	Dmitry Gladkov	nobody	"Related PR: https://github.com/django/django/pull/7857

Suggested example usage (I know that a string  can't be a signal sender, this is just for illustrating the point):
{{{#!python
from django.core.management import signals


def handle_pre(sender, instance):
    instance.stdout.write('Hello World')

def handle_post(sender, instance):
    instance.stdout.write('Bye World')

signals.pre_command.connect(handle_pre, sender='runserver')
signals.post_command.connect(handle_post, sender='runsever')
}}}

Reasoning:

Currently overriding of commands in Django can only be achieved by shadowing existing commands using `INSTALLED_APPS` initialization order. This is a perfectly good solution if a user needs to completely override a command, but it's not ideal for extending/adding functionality to existing commands. Extending the same command from different apps will not work as only the extended command from the latest `INSTALLED_APPS` entry will run (see Example 2).

Some examples of actions that can be achieved using singals:

1. Pulling remote translations before `compilemessages`.
2. Showing coverage or/and generating xml report after `test`.
3. Running optipng on collected static images after `collectstatic`
4. Displaying useful information like outdated package versions before `runserver`."	New feature	new	Core (Management commands)	dev	Normal			Ülgen Sarıkavak	Someday/Maybe	0	0	0	0	0	0
