reuse snapshot admin change object

This commit is contained in:
Nick Sweeting 2026-08-27 15:36:58 -07:00
parent 06659868af
commit fc3e3aa485
No known key found for this signature in database
2 changed files with 29 additions and 8 deletions

View File

@ -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

View File

@ -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