From fc3e3aa485cf63a2474db70365a07d85bc3c523c Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Thu, 27 Aug 2026 15:36:58 -0700 Subject: [PATCH] reuse snapshot admin change object --- archivebox/core/admin_snapshots.py | 15 +++++++-------- archivebox/tests/test_ui_admin_snapshot.py | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/archivebox/core/admin_snapshots.py b/archivebox/core/admin_snapshots.py index 08c0c777..c4f07c02 100644 --- a/archivebox/core/admin_snapshots.py +++ b/archivebox/core/admin_snapshots.py @@ -509,19 +509,18 @@ class SnapshotAdmin(SearchResultsAdminMixin, ConfigEditorMixin, BaseModelAdmin): return [] return super().get_ordering(request) - def change_view(self, request, object_id, form_url="", extra_context=None): + def render_change_form(self, request, context, add=False, change=False, form_url="", obj=None): self.request = request - extra_context = extra_context or {} - extra_context["CONFIG"] = request.archivebox_config - snapshot = self.get_object(request, object_id) - if snapshot and snapshot.status in { + context["CONFIG"] = request.archivebox_config + if obj and obj.status in { Snapshot.StatusChoices.QUEUED, Snapshot.StatusChoices.STARTED, Snapshot.StatusChoices.PAUSED, }: - extra_context["progress_auto_expand"] = True - extra_context["progress_endpoint"] = progress_endpoint("snapshot", snapshot.id) - return super().change_view(request, object_id, form_url, extra_context | GLOBAL_CONTEXT) + context["progress_auto_expand"] = True + context["progress_endpoint"] = progress_endpoint("snapshot", obj.id) + context.update(GLOBAL_CONTEXT) + return super().render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj) def changelist_view(self, request, extra_context=None): self.request = request diff --git a/archivebox/tests/test_ui_admin_snapshot.py b/archivebox/tests/test_ui_admin_snapshot.py index 187573de..60d9a31b 100644 --- a/archivebox/tests/test_ui_admin_snapshot.py +++ b/archivebox/tests/test_ui_admin_snapshot.py @@ -912,6 +912,28 @@ class TestAdminSnapshotListView: assert response.status_code == 200 assert f"/admin/core/snapshot/{snapshot.pk}/redo-failed/".encode() in response.content + def test_change_view_reuses_resolved_snapshot_for_progress_context(self, client, admin_user, snapshot): + from django.db import connection + from django.test.utils import CaptureQueriesContext + + snapshot.status = snapshot.StatusChoices.STARTED + snapshot.__class__.objects.filter(pk=snapshot.pk).update(status=snapshot.status) + client.force_login(admin_user) + url = reverse("admin:core_snapshot_change", args=[snapshot.pk]) + + with CaptureQueriesContext(connection) as captured_queries: + response = client.get(url, HTTP_HOST=ADMIN_TEST_HOST) + + snapshot_reads = [ + query["sql"] + for query in captured_queries + if 'FROM "core_snapshot"' in query["sql"] and '"core_snapshot"."id" =' in query["sql"] + ] + assert response.status_code == 200 + assert response.context["progress_auto_expand"] is True + assert response.context["progress_endpoint"].endswith(f"?snapshot_id={snapshot.pk}") + assert len(snapshot_reads) == 1 + def test_snapshot_view_url_uses_canonical_replay_url_for_mode(self, snapshot): from archivebox.core.admin_site import archivebox_admin from archivebox.core.admin_snapshots import SnapshotAdmin