3
3
from django .conf import settings
4
4
from django .contrib import admin
5
5
from django .utils .translation import gettext_lazy as _
6
+ from django .contrib import messages
7
+ from celery import current_app as celery_app
8
+
6
9
7
10
try :
8
11
ALLOW_EDITS = settings .DJANGO_CELERY_RESULTS ['ALLOW_EDITS' ]
@@ -58,6 +61,7 @@ class TaskResultAdmin(admin.ModelAdmin):
58
61
'classes' : ('extrapretty' , 'wide' )
59
62
}),
60
63
)
64
+ actions = ['terminate_task' ]
61
65
62
66
def get_readonly_fields (self , request , obj = None ):
63
67
if ALLOW_EDITS :
@@ -67,6 +71,26 @@ def get_readonly_fields(self, request, obj=None):
67
71
field .name for field in self .opts .local_fields
68
72
})
69
73
74
+ def terminate_task (self , request , queryset ):
75
+ """Terminate selected tasks."""
76
+ for task_result in queryset :
77
+ task_id = task_result .task_id
78
+ try :
79
+ celery_app .control .revoke (task_id , terminate = True )
80
+ self .message_user (
81
+ request ,
82
+ f"Task { task_id } was terminated successfully." ,
83
+ messages .SUCCESS ,
84
+ )
85
+ except Exception as e :
86
+ self .message_user (
87
+ request ,
88
+ f"Failed to terminate task { task_id } . Error: { e } " ,
89
+ messages .ERROR ,
90
+ )
91
+
92
+ terminate_task .short_description = "Terminate selected tasks"
93
+
70
94
71
95
admin .site .register (TaskResult , TaskResultAdmin )
72
96
0 commit comments