Command Signals =============== :synopsis: Signals fired before and after a command is executed. A signal is thrown pre/post each management command allowing your application to hook into each commands execution. Basic Example ------------- An example hooking into show_template_tags: :: from django_extensions.management.signals import pre_command, post_command from django_extensions.management.commands.show_template_tags import Command def pre_receiver(sender, args, kwargs): # I'm executed prior to the management command def post_receiver(sender, args, kwargs, outcome): # I'm executed after the management command pre_command.connect(pre_receiver, Command) post_command.connect(post_receiver, Command) Custom Permissions For All Models --------------------------------- You can use the post signal to hook into the ``update_permissions`` command so that you can add your own permissions to each model. For instance, lets say you want to add ``list`` and ``view`` permissions to each model. You could do this by adding them to the ``permissions`` tuple inside your models ``Meta`` class but this gets pretty tedious. An easier solution is to hook into the ``update_permissions`` call, as follows; :: from django.db.models.signals import post_syncdb from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Permission from django_extensions.management.signals import post_command from django_extensions.management.commands.update_permissions import Command as UpdatePermissionsCommand def add_permissions(sender, **kwargs): """ Add view and list permissions to all content types. """ # for each of our content types for content_type in ContentType.objects.all(): for action in ['view', 'list']: # build our permission slug codename = "%s_%s" % (action, content_type.model) try: Permission.objects.get(content_type=content_type, codename=codename) # Already exists, ignore except Permission.DoesNotExist: # Doesn't exist, add it Permission.objects.create(content_type=content_type, codename=codename, name="Can %s %s" % (action, content_type.name)) print "Added %s permission for %s" % (action, content_type.name) post_command.connect(add_permissions, UpdatePermissionsCommand) Each time ``update_permissions`` is called ``add_permissions`` will be called which ensures there are view and list permissions to all content types. Using pre/post signals on your own commands ------------------------------------------- The signals are implemented using a decorator on the handle method of a management command, thus using this functionality in your own application is trivial: :: from django_extensions.management.utils import signalcommand class Command(BaseCommand): @signalcommand def handle(self, *args, **kwargs): ... ...