I work with multiple projects, many of which have multiple custom management commands defined. It can be hard to remember them, and slow to pick them out of the "manage.py help" list.
This quickie command lists all of a project's custom commands (along with their help text). Writing it was easy after looking at the source of django.core.management.
Open questions include: how do you decide which app to put this command in? Should this command list itself?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from django.core.management import find_management_module, find_commands, load_command_class
from django.core.management.base import NoArgsCommand
from django.conf import settings
class Command(NoArgsCommand):
help = "Show the list of custom management commands in this project."
requires_model_validation = False
def handle_noargs(self, **options):
app_names = [a for a in settings.INSTALLED_APPS if not a.startswith("django.")]
print "Custom management commands in this project:"
for app_name in app_names:
command_names = find_commands(find_management_module(app_name))
for command_name in command_names:
help_text = load_command_class(app_name, command_name).help
print "%s\n\t%s (%s)\n" % (command_name, help_text, app_name)
if not app_names:
print "None"
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 8 months ago
Comments
You should suggest including this with Django Extensions. That seems like an ideal home for it.
#
Very cool, I second andybak's suggestion. If you fork django-extensions on Github and send us a pull request I can add it right away. Oh, there is one thing, the find_management_module call in line 14 will raise an ImportError on 1.1.
#
Please login first before commenting.