#27747: Add signals for Django management commands
-------------------------------------+-------------------------------------
               Reporter:  Dmitry     |          Owner:  nobody
  Gladkov                            |
                   Type:  New        |         Status:  new
  feature                            |
              Component:  Core       |        Version:  master
  (Management commands)              |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 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`.

--
Ticket URL: <https://code.djangoproject.com/ticket/27747>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/046.36b28dd3aed61c03394956a205d61cd5%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to