11
11
12
12
class HiddenMixin (object ):
13
13
class Media :
14
- js = ['admin/js/jquery.init.js' , ]
14
+ js = [
15
+ "admin/js/jquery.init.js" ,
16
+ ]
15
17
16
18
17
19
class JobArgInline (HiddenMixin , GenericStackedInline ):
18
20
model = TaskArg
19
21
extra = 0
20
22
fieldsets = (
21
- (None , {
22
- 'fields' : (('arg_type' , 'val' ,),),
23
- }),
23
+ (
24
+ None ,
25
+ {
26
+ "fields" : (
27
+ (
28
+ "arg_type" ,
29
+ "val" ,
30
+ ),
31
+ ),
32
+ },
33
+ ),
24
34
)
25
35
26
36
27
37
class JobKwargInline (HiddenMixin , GenericStackedInline ):
28
38
model = TaskKwarg
29
39
extra = 0
30
40
fieldsets = (
31
- (None , {
32
- 'fields' : (('key' ,), ('arg_type' , 'val' ,),),
33
- }),
41
+ (
42
+ None ,
43
+ {
44
+ "fields" : (
45
+ ("key" ,),
46
+ (
47
+ "arg_type" ,
48
+ "val" ,
49
+ ),
50
+ ),
51
+ },
52
+ ),
34
53
)
35
54
36
55
37
56
_LIST_DISPLAY_EXTRA = dict (
38
- CronTask = ('cron_string' , 'next_run' , 'successful_runs' , 'last_successful_run' , 'failed_runs' , 'last_failed_run' ,),
39
- ScheduledTask = ('scheduled_time' ,),
57
+ CronTask = (
58
+ "cron_string" ,
59
+ "next_run" ,
60
+ "successful_runs" ,
61
+ "last_successful_run" ,
62
+ "failed_runs" ,
63
+ "last_failed_run" ,
64
+ ),
65
+ ScheduledTask = ("scheduled_time" ,),
40
66
RepeatableTask = (
41
- 'scheduled_time' , 'interval_display' , 'successful_runs' , 'last_successful_run' , 'failed_runs' ,
42
- 'last_failed_run' ,),
67
+ "scheduled_time" ,
68
+ "interval_display" ,
69
+ "successful_runs" ,
70
+ "last_successful_run" ,
71
+ "failed_runs" ,
72
+ "last_failed_run" ,
73
+ ),
43
74
)
44
75
_FIELDSET_EXTRA = dict (
45
76
CronTask = (
46
- 'cron_string' , 'timeout' , 'result_ttl' ,
47
- ('successful_runs' , 'last_successful_run' ,),
48
- ('failed_runs' , 'last_failed_run' ,),
77
+ "cron_string" ,
78
+ "timeout" ,
79
+ "result_ttl" ,
80
+ (
81
+ "successful_runs" ,
82
+ "last_successful_run" ,
83
+ ),
84
+ (
85
+ "failed_runs" ,
86
+ "last_failed_run" ,
87
+ ),
49
88
),
50
- ScheduledTask = (' scheduled_time' , ' timeout' , ' result_ttl' ),
89
+ ScheduledTask = (" scheduled_time" , " timeout" , " result_ttl" ),
51
90
RepeatableTask = (
52
- 'scheduled_time' ,
53
- ('interval' , 'interval_unit' ,),
54
- 'repeat' , 'timeout' , 'result_ttl' ,
55
- ('successful_runs' , 'last_successful_run' ,),
56
- ('failed_runs' , 'last_failed_run' ,),
91
+ "scheduled_time" ,
92
+ (
93
+ "interval" ,
94
+ "interval_unit" ,
95
+ ),
96
+ "repeat" ,
97
+ "timeout" ,
98
+ "result_ttl" ,
99
+ (
100
+ "successful_runs" ,
101
+ "last_successful_run" ,
102
+ ),
103
+ (
104
+ "failed_runs" ,
105
+ "last_failed_run" ,
106
+ ),
57
107
),
58
108
)
59
109
@@ -65,60 +115,94 @@ class TaskAdmin(admin.ModelAdmin):
65
115
"""
66
116
67
117
save_on_top = True
68
- change_form_template = 'admin/scheduler/change_form.html'
69
- actions = ['disable_selected' , 'enable_selected' , 'enqueue_job_now' , ]
70
- inlines = [JobArgInline , JobKwargInline , ]
71
- list_filter = ('enabled' ,)
72
- list_display = ('enabled' , 'name' , 'job_id' , 'function_string' , 'is_scheduled' , 'queue' ,)
73
- list_display_links = ('name' ,)
74
- readonly_fields = ('job_id' ,)
118
+ change_form_template = "admin/scheduler/change_form.html"
119
+ actions = [
120
+ "disable_selected" ,
121
+ "enable_selected" ,
122
+ "enqueue_job_now" ,
123
+ ]
124
+ inlines = [
125
+ JobArgInline ,
126
+ JobKwargInline ,
127
+ ]
128
+ list_filter = ("enabled" ,)
129
+ list_display = (
130
+ "enabled" ,
131
+ "name" ,
132
+ "job_id" ,
133
+ "function_string" ,
134
+ "is_scheduled" ,
135
+ "queue" ,
136
+ )
137
+ list_display_links = ("name" ,)
138
+ readonly_fields = ("job_id" ,)
75
139
fieldsets = (
76
- (None , {
77
- 'fields' : ('name' , 'callable' , 'enabled' , 'at_front' ,),
78
- }),
79
- (_ ('RQ Settings' ), {
80
- 'fields' : ('queue' , 'job_id' ,),
81
- }),
140
+ (
141
+ None ,
142
+ {
143
+ "fields" : (
144
+ "name" ,
145
+ "callable" ,
146
+ "enabled" ,
147
+ "at_front" ,
148
+ ),
149
+ },
150
+ ),
151
+ (
152
+ _ ("RQ Settings" ),
153
+ {
154
+ "fields" : (
155
+ "queue" ,
156
+ "job_id" ,
157
+ ),
158
+ },
159
+ ),
82
160
)
83
161
84
162
def get_list_display (self , request ):
85
163
if self .model .__name__ not in _LIST_DISPLAY_EXTRA :
86
- raise ValueError (f' Unrecognized model { self .model } ' )
164
+ raise ValueError (f" Unrecognized model { self .model } " )
87
165
return TaskAdmin .list_display + _LIST_DISPLAY_EXTRA [self .model .__name__ ]
88
166
89
167
def get_fieldsets (self , request , obj = None ):
90
168
if self .model .__name__ not in _FIELDSET_EXTRA :
91
- raise ValueError (f'Unrecognized model { self .model } ' )
92
- return TaskAdmin .fieldsets + ((_ ('Scheduling' ), {
93
- 'fields' : _FIELDSET_EXTRA [self .model .__name__ ],
94
- }),)
95
-
96
- @admin .display (description = 'Next run' )
169
+ raise ValueError (f"Unrecognized model { self .model } " )
170
+ return TaskAdmin .fieldsets + (
171
+ (
172
+ _ ("Scheduling" ),
173
+ {
174
+ "fields" : _FIELDSET_EXTRA [self .model .__name__ ],
175
+ },
176
+ ),
177
+ )
178
+
179
+ @admin .display (description = "Next run" )
97
180
def next_run (self , o : CronTask ):
98
181
return tools .get_next_cron_time (o .cron_string )
99
182
100
- def change_view (self , request , object_id , form_url = '' , extra_context = None ):
183
+ def change_view (self , request , object_id , form_url = "" , extra_context = None ):
101
184
extra = extra_context or {}
102
185
obj = self .get_object (request , object_id )
103
186
try :
104
187
execution_list = get_job_executions (obj .queue , obj )
105
188
except redis .ConnectionError as e :
106
- logger .warn (f' Could not get job executions: { e } ' )
189
+ logger .warn (f" Could not get job executions: { e } " )
107
190
execution_list = list ()
108
- paginator = self .get_paginator (request , execution_list , SCHEDULER_CONFIG [' EXECUTIONS_IN_PAGE' ])
109
- page_number = request .GET .get ('p' , 1 )
191
+ paginator = self .get_paginator (request , execution_list , SCHEDULER_CONFIG [" EXECUTIONS_IN_PAGE" ])
192
+ page_number = request .GET .get ("p" , 1 )
110
193
page_obj = paginator .get_page (page_number )
111
194
page_range = paginator .get_elided_page_range (page_obj .number )
112
195
113
- extra .update ({
114
- "pagination_required" : paginator .count > SCHEDULER_CONFIG ['EXECUTIONS_IN_PAGE' ],
115
- 'executions' : page_obj ,
116
- 'page_range' : page_range ,
117
- 'page_var' : 'p' ,
118
- })
196
+ extra .update (
197
+ {
198
+ "pagination_required" : paginator .count > SCHEDULER_CONFIG ["EXECUTIONS_IN_PAGE" ],
199
+ "executions" : page_obj ,
200
+ "page_range" : page_range ,
201
+ "page_var" : "p" ,
202
+ }
203
+ )
119
204
120
- return super (TaskAdmin , self ).change_view (
121
- request , object_id , form_url , extra_context = extra )
205
+ return super (TaskAdmin , self ).change_view (request , object_id , form_url , extra_context = extra )
122
206
123
207
def delete_queryset (self , request , queryset ):
124
208
for job in queryset :
@@ -129,7 +213,7 @@ def delete_model(self, request, obj):
129
213
obj .unschedule ()
130
214
super (TaskAdmin , self ).delete_model (request , obj )
131
215
132
- @admin .action (description = _ ("Disable selected %(verbose_name_plural)s" ), permissions = (' change' ,))
216
+ @admin .action (description = _ ("Disable selected %(verbose_name_plural)s" ), permissions = (" change" ,))
133
217
def disable_selected (self , request , queryset ):
134
218
rows_updated = 0
135
219
for obj in queryset .filter (enabled = True ).iterator ():
@@ -142,7 +226,7 @@ def disable_selected(self, request, queryset):
142
226
level = messages .WARNING if not rows_updated else messages .INFO
143
227
self .message_user (request , f"{ message_bit } successfully disabled and unscheduled." , level = level )
144
228
145
- @admin .action (description = _ ("Enable selected %(verbose_name_plural)s" ), permissions = (' change' ,))
229
+ @admin .action (description = _ ("Enable selected %(verbose_name_plural)s" ), permissions = (" change" ,))
146
230
def enable_selected (self , request , queryset ):
147
231
rows_updated = 0
148
232
for obj in queryset .filter (enabled = False ).iterator ():
@@ -154,10 +238,13 @@ def enable_selected(self, request, queryset):
154
238
level = messages .WARNING if not rows_updated else messages .INFO
155
239
self .message_user (request , f"{ message_bit } successfully enabled and scheduled." , level = level )
156
240
157
- @admin .action (description = "Enqueue now" , permissions = (' change' ,))
241
+ @admin .action (description = "Enqueue now" , permissions = (" change" ,))
158
242
def enqueue_job_now (self , request , queryset ):
159
243
task_names = []
160
244
for task in queryset :
161
245
task .enqueue_to_run ()
162
246
task_names .append (task .name )
163
- self .message_user (request , f"The following jobs have been enqueued: { ', ' .join (task_names )} " , )
247
+ self .message_user (
248
+ request ,
249
+ f"The following jobs have been enqueued: { ', ' .join (task_names )} " ,
250
+ )
0 commit comments