diff --git a/django_q/admin.py b/django_q/admin.py index 0ae5d01..9ba5719 100644 --- a/django_q/admin.py +++ b/django_q/admin.py @@ -10,10 +10,29 @@ from django_q.models import Failure, OrmQ, Schedule, Success, Task from django_q.tasks import async_task +def resubmit_task(model_admin, request, queryset): + """Submit selected tasks back to the queue.""" + for task in queryset: + async_task( + task.func, + *task.args or (), + hook=task.hook, + group=task.group, + cluster=task.cluster, + **task.kwargs or {}, + ) + if isinstance(model_admin, FailAdmin): + task.delete() + + +resubmit_task.short_description = _("Resubmit selected tasks to queue") + + class TaskAdmin(admin.ModelAdmin): """model admin for success tasks.""" list_display = ("name", "group", "func", "cluster", "started", "stopped", "time_taken") + actions = [resubmit_task] def has_add_permission(self, request): """Don't allow adds.""" @@ -33,17 +52,6 @@ class TaskAdmin(admin.ModelAdmin): return list(self.readonly_fields) + [field.name for field in obj._meta.fields] -def retry_failed(FailAdmin, request, queryset): - """Submit selected tasks back to the queue.""" - for task in queryset: - async_task(task.func, *task.args or (), hook=task.hook, - group=task.group, cluster=task.cluster, **task.kwargs or {}) - task.delete() - - -retry_failed.short_description = _("Resubmit selected tasks to queue") - - class FailAdmin(admin.ModelAdmin): """model admin for failed tasks.""" @@ -53,7 +61,7 @@ class FailAdmin(admin.ModelAdmin): """Don't allow adds.""" return False - actions = [retry_failed] + actions = [resubmit_task] search_fields = ("name", "func", "group") list_filter = ("group", "cluster") readonly_fields = [] diff --git a/django_q/tests/test_admin.py b/django_q/tests/test_admin.py index 959e180..649c56c 100644 --- a/django_q/tests/test_admin.py +++ b/django_q/tests/test_admin.py @@ -64,7 +64,7 @@ def test_admin_views(admin_client, monkeypatch): # resubmit the failure url = reverse("admin:django_q_failure_changelist") - data = {"action": "retry_failed", "_selected_action": [f.pk]} + data = {"action": "resubmit_task", "_selected_action": [f.pk]} response = admin_client.post(url, data) assert response.status_code == 302 assert Failure.objects.filter(name=f.id).exists() is False @@ -84,3 +84,10 @@ def test_admin_views(admin_client, monkeypatch): data = {"post": "yes"} response = admin_client.post(url, data) assert response.status_code == 302 + # Resubmit a successful task. + url = reverse("admin:django_q_success_changelist") + data = {"action": "resubmit_task", "_selected_action": [t.pk]} + initial_queue_count = OrmQ.objects.count() + response = admin_client.post(url, data) + assert response.status_code == 302 + assert OrmQ.objects.count() > initial_queue_count