web/lib/django_extensions/management/commands/runjob.py
changeset 3 526ebd3988b0
equal deleted inserted replaced
1:ebaad720f88b 3:526ebd3988b0
       
     1 from django.core.management.base import LabelCommand
       
     2 from optparse import make_option
       
     3 from django_extensions.management.jobs import get_job, print_jobs
       
     4 
       
     5 class Command(LabelCommand):
       
     6     option_list = LabelCommand.option_list + (
       
     7         make_option('--list', '-l', action="store_true", dest="list_jobs",
       
     8             help="List all jobs with their description"),
       
     9     )
       
    10     help = "Run a single maintenance job."
       
    11     args = "[app_name] job_name"
       
    12     label = ""
       
    13     
       
    14     requires_model_validation = True
       
    15 
       
    16     def runjob(self, app_name, job_name, options):
       
    17         verbosity = int(options.get('verbosity', 1))
       
    18         if verbosity>1:
       
    19             print "Executing job: %s (app: %s)" % (job_name, app_name)
       
    20         try:
       
    21             job = get_job(app_name, job_name)
       
    22         except KeyError, e:
       
    23             if app_name:
       
    24                 print "Error: Job %s for applabel %s not found" % (app_name, job_name)
       
    25             else:
       
    26                 print "Error: Job %s not found" % job_name
       
    27             print "Use -l option to view all the available jobs"
       
    28             return
       
    29         try:
       
    30             job().execute()
       
    31         except Exception, e:
       
    32             import traceback
       
    33             print "ERROR OCCURED IN JOB: %s (APP: %s)" % (job_name, app_name)
       
    34             print "START TRACEBACK:"
       
    35             traceback.print_exc()
       
    36             print "END TRACEBACK\n"
       
    37     
       
    38     def handle(self, *args, **options):
       
    39         app_name = None
       
    40         job_name = None
       
    41         if len(args)==1:
       
    42             job_name = args[0]
       
    43         elif len(args)==2:
       
    44             app_name, job_name = args
       
    45         if options.get('list_jobs'):
       
    46             print_jobs(only_scheduled=False, show_when=True, show_appname=True)
       
    47         else:
       
    48             if not job_name:
       
    49                 print "Run a single maintenance job. Please specify the name of the job."
       
    50                 return
       
    51             self.runjob(app_name, job_name, options)
       
    52 
       
    53 # Backwards compatibility for Django r9110
       
    54 if not [opt for opt in Command.option_list if opt.dest=='verbosity']:
       
    55     Command.option_list += (
       
    56         make_option('--verbosity', '-v', action="store", dest="verbosity",
       
    57             default='1', type='choice', choices=['0', '1', '2'],
       
    58             help="Verbosity level; 0=minimal output, 1=normal output, 2=all output"),
       
    59     )