diff -r ebaad720f88b -r 526ebd3988b0 web/lib/django_extensions/management/commands/runjob.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/django_extensions/management/commands/runjob.py Wed Jan 20 12:37:40 2010 +0100 @@ -0,0 +1,59 @@ +from django.core.management.base import LabelCommand +from optparse import make_option +from django_extensions.management.jobs import get_job, print_jobs + +class Command(LabelCommand): + option_list = LabelCommand.option_list + ( + make_option('--list', '-l', action="store_true", dest="list_jobs", + help="List all jobs with their description"), + ) + help = "Run a single maintenance job." + args = "[app_name] job_name" + label = "" + + requires_model_validation = True + + def runjob(self, app_name, job_name, options): + verbosity = int(options.get('verbosity', 1)) + if verbosity>1: + print "Executing job: %s (app: %s)" % (job_name, app_name) + try: + job = get_job(app_name, job_name) + except KeyError, e: + if app_name: + print "Error: Job %s for applabel %s not found" % (app_name, job_name) + else: + print "Error: Job %s not found" % job_name + print "Use -l option to view all the available jobs" + return + try: + job().execute() + except Exception, e: + import traceback + print "ERROR OCCURED IN JOB: %s (APP: %s)" % (job_name, app_name) + print "START TRACEBACK:" + traceback.print_exc() + print "END TRACEBACK\n" + + def handle(self, *args, **options): + app_name = None + job_name = None + if len(args)==1: + job_name = args[0] + elif len(args)==2: + app_name, job_name = args + if options.get('list_jobs'): + print_jobs(only_scheduled=False, show_when=True, show_appname=True) + else: + if not job_name: + print "Run a single maintenance job. Please specify the name of the job." + return + self.runjob(app_name, job_name, options) + +# Backwards compatibility for Django r9110 +if not [opt for opt in Command.option_list if opt.dest=='verbosity']: + Command.option_list += ( + make_option('--verbosity', '-v', action="store", dest="verbosity", + default='1', type='choice', choices=['0', '1', '2'], + help="Verbosity level; 0=minimal output, 1=normal output, 2=all output"), + )