From 21b2cec4899780d57d74f3f3e81a9a181d9c3899 Mon Sep 17 00:00:00 2001 From: Kim Gustyr Date: Fri, 22 Nov 2024 18:14:19 +0000 Subject: [PATCH 1/2] feat: Admin improvements - Add `last_run_finished_at` admin field - Add `unlock` admin action --- task_processor/admin.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/task_processor/admin.py b/task_processor/admin.py index d62366c..d164427 100644 --- a/task_processor/admin.py +++ b/task_processor/admin.py @@ -1,4 +1,7 @@ +from datetime import datetime from django.contrib import admin +from django.http import HttpRequest +from django.db.models import QuerySet from task_processor.models import RecurringTask @@ -18,3 +21,16 @@ def last_run_status(self, instance: RecurringTask) -> str | None: if last_run := instance.task_runs.order_by("-started_at").first(): return last_run.result return None + + def last_run_finished_at(self, instance: RecurringTask) -> datetime | None: + if last_run := instance.task_runs.order_by("-started_at").first(): + return last_run.finished_at + return None + + @admin.action(description="Unlock selected tasks") + def unlock( + self, + request: HttpRequest, + queryset: QuerySet[RecurringTask], + ) -> None: + queryset.update(is_locked=False) From ae9b71fb0c54c5d675793ea0c8b33dbc60537ff1 Mon Sep 17 00:00:00 2001 From: Kim Gustyr Date: Wed, 4 Dec 2024 11:26:05 +0000 Subject: [PATCH 2/2] fix imports, add field to list display --- task_processor/admin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/task_processor/admin.py b/task_processor/admin.py index d164427..1311bb4 100644 --- a/task_processor/admin.py +++ b/task_processor/admin.py @@ -1,7 +1,8 @@ from datetime import datetime + from django.contrib import admin -from django.http import HttpRequest from django.db.models import QuerySet +from django.http import HttpRequest from task_processor.models import RecurringTask @@ -13,6 +14,7 @@ class RecurringTaskAdmin(admin.ModelAdmin): "task_identifier", "run_every", "last_run_status", + "last_run_finished_at", "is_locked", ) readonly_fields = ("args", "kwargs")