Login

Management command decorator

Author:
eternicode
Posted:
August 31, 2010
Language:
Python
Version:
1.1
Score:
2 (after 2 ratings)

A quick-and-dirty, and extremely simple, decorator to turn a simple function into a management command.

This still requires you to have the management directory structure, but allows you to name your primary method whatever you want, and encapsulates the basic functionality of an argument-accepting management commmand.

The function's docstring will be used for the command's help text if the help arg is not passed to the decorator.

Simple usage:

from myapp.utils import command

@command()
def my_command():
    print "Hello, world"

I'm not too familiar with the intricacies of decorators and management commands, so this could probably (most likely) be improved upon, but it's a start.

Update: I've taken this a bit farther and put my work up on bitbucket: https://bitbucket.org/eternicode/django-management-decorators/src

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from django.core.management.base import BaseCommand

def command(help=None, args=''):
    def _decorate(func):
        _args = args
        _help = help
        class Command(BaseCommand):
            help = _help if _help is not None else func.__doc__
            args = _args
            def handle(self, *args, **kwargs):
                return func(*args, **kwargs)
        func.func_globals['Command'] = Command
        return func
    return _decorate

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 8 months, 3 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 9 months ago
  3. Serializer factory with Django Rest Framework by julio 1 year, 3 months ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 4 months ago
  5. Help text hyperlinks by sa2812 1 year, 5 months ago

Comments

gmandx (on August 31, 2010):

Well, some how (and I think it can be done) the decorator can introspect the function's positional arguments and keyword arguments, and then use those for the command's arguments and options, respectively. Then the only parameter needed for the decorator usage would be the help text.

#

eternicode (on August 31, 2010):

gmandx, interesting idea. I've done some light reading around, and it looks like the functools module has some stuff that could do this.

#

Please login first before commenting.