|
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 ) |