99
1010from scheduler import tools
1111from scheduler .broker_types import ConnectionErrorTypes
12- from scheduler .models import CronTask , TaskArg , TaskKwarg , RepeatableTask , ScheduledTask , BaseTask
12+ from scheduler .models import CronTask , TaskArg , TaskKwarg , RepeatableTask , ScheduledTask , BaseTask , migrate_util
1313from scheduler .settings import SCHEDULER_CONFIG , logger
1414from scheduler .tools import get_job_executions_for_task
1515
@@ -113,6 +113,11 @@ class JobKwargInline(HiddenMixin, GenericStackedInline):
113113)
114114
115115
116+ def get_message_bit (rows_updated : int ) -> str :
117+ message_bit = "1 task was" if rows_updated == 1 else f"{ rows_updated } tasks were"
118+ return message_bit
119+
120+
116121@admin .register (CronTask , ScheduledTask , RepeatableTask )
117122class TaskAdmin (admin .ModelAdmin ):
118123 """TaskAdmin admin view for all task models.
@@ -230,6 +235,16 @@ def delete_model(self, request, obj):
230235 obj .unschedule ()
231236 super (TaskAdmin , self ).delete_model (request , obj )
232237
238+ @admin .action (description = _ ("Migrate to new Task model(s)" ), permissions = ("change" ,))
239+ def migrate (self , request , queryset ):
240+ rows_updated = 0
241+ for obj in queryset .filter (enabled = True ).iterator ():
242+ migrate_util .migrate (obj )
243+ rows_updated += 1
244+
245+ level = messages .WARNING if not rows_updated else messages .INFO
246+ self .message_user (request , f"{ get_message_bit (rows_updated )} successfully migrated to new model." , level = level )
247+
233248 @admin .action (description = _ ("Disable selected %(verbose_name_plural)s" ), permissions = ("change" ,))
234249 def disable_selected (self , request , queryset ):
235250 rows_updated = 0
@@ -238,10 +253,9 @@ def disable_selected(self, request, queryset):
238253 obj .unschedule ()
239254 rows_updated += 1
240255
241- message_bit = "1 job was" if rows_updated == 1 else f"{ rows_updated } jobs were"
242-
243256 level = messages .WARNING if not rows_updated else messages .INFO
244- self .message_user (request , f"{ message_bit } successfully disabled and unscheduled." , level = level )
257+ self .message_user (request , f"{ get_message_bit (rows_updated )} successfully disabled and unscheduled." ,
258+ level = level )
245259
246260 @admin .action (description = _ ("Enable selected %(verbose_name_plural)s" ), permissions = ("change" ,))
247261 def enable_selected (self , request , queryset ):
@@ -251,9 +265,8 @@ def enable_selected(self, request, queryset):
251265 obj .save ()
252266 rows_updated += 1
253267
254- message_bit = "1 job was" if rows_updated == 1 else f"{ rows_updated } jobs were"
255268 level = messages .WARNING if not rows_updated else messages .INFO
256- self .message_user (request , f"{ message_bit } successfully enabled and scheduled." , level = level )
269+ self .message_user (request , f"{ get_message_bit ( rows_updated ) } successfully enabled and scheduled." , level = level )
257270
258271 @admin .action (description = "Enqueue now" , permissions = ("change" ,))
259272 def enqueue_job_now (self , request , queryset ):
0 commit comments