From 9ead76f9f8b3e6336af48a480f75a967782dc26c Mon Sep 17 00:00:00 2001 From: Nick Sweeting <git@sweeting.me> Date: Thu, 18 Feb 2021 08:04:50 -0500 Subject: [PATCH] cross link snapshot index, admin, and actions pages using uuids --- archivebox/core/views.py | 27 ++++++++++++++----------- archivebox/templates/core/snapshot.html | 2 +- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/archivebox/core/views.py b/archivebox/core/views.py index f4a976ea..801676b3 100644 --- a/archivebox/core/views.py +++ b/archivebox/core/views.py @@ -61,7 +61,7 @@ class SnapshotView(View): try: try: - snapshot = Snapshot.objects.get(timestamp=slug) + snapshot = Snapshot.objects.get(Q(timestamp=slug) | Q(id__startswith=slug)) response = static.serve(request, archivefile, document_root=snapshot.link_dir, show_indexes=True) response["Link"] = f'<{snapshot.url}>; rel="canonical"' return response @@ -76,7 +76,7 @@ class SnapshotView(View): format_html( ( '<center><br/><br/><br/>' - 'No Snapshots match the given timestamp or UUID: <code>{}</code><br/><br/>' + 'No Snapshot directories match the given timestamp or UUID: <code>{}</code><br/><br/>' 'You can <a href="/add/" target="_top">add a new Snapshot</a>, or return to the <a href="/" target="_top">Main Index</a>' '</center>' ), @@ -119,18 +119,21 @@ class SnapshotView(View): format_html( ( '<center><br/><br/><br/>' - '<a href="/archive/{}/index.html" target="_top">Snapshot <b><code>{}</code></b></a> exists but no file or folder <b><code>/{}</code></b> exists within.<br/><br/>' - '<small>Maybe this output type is not availabe for this URL,<br/>or the archiving process has not completed for this Snapshot yet?<br/>' - '<pre><code># run this cmd to finish archiving this Snapshot<br/>archivebox update -t timestamp {}</code></pre></small><br/><br/>' - 'You can go back to the <a href="/archive/{}/index.html" target="_top">Snapshot <b><code>{}</code></b></a> detail page, or return to the <a href="/" target="_top">Main Index</a>' + f'Snapshot <a href="/archive/{snapshot.timestamp}/index.html" target="_top"><b><code>[{snapshot.timestamp}]</code></b></a> exists in DB, but resource <b><code>{snapshot.timestamp}/' + '{}' + f'</code></b> does not exist in <a href="/archive/{snapshot.timestamp}/" target="_top">snapshot dir</a> yet.<br/><br/>' + 'Maybe this resource type is not availabe for this Snapshot,<br/>or the archiving process has not completed yet?<br/>' + f'<pre><code># run this cmd to finish archiving this Snapshot<br/>archivebox update -t timestamp {snapshot.timestamp}</code></pre><br/><br/>' + '<div class="text-align: left; width: 100%; max-width: 400px">' + '<i><b>Next steps:</i></b><br/>' + f'- list all the <a href="/archive/{snapshot.timestamp}/" target="_top">Snapshot files <code>.*</code></a><br/>' + f'- view the <a href="/archive/{snapshot.timestamp}/index.html" target="_top">Snapshot <code>./index.html</code></a><br/>' + f'- go to the <a href="/admin/core/snapshot/{snapshot.id}/change/" target="_top">Snapshot admin</a> to edit<br/>' + f'- go to the <a href="/admin/core/snapshot/?id__startswith={snapshot.id}" target="_top">Snapshot actions</a> to re-archive<br/>' + '- or return to <a href="/" target="_top">the main index...</a></div>' '</center>' ), - snapshot.timestamp, - snapshot.timestamp, archivefile, - snapshot.timestamp, - snapshot.timestamp, - snapshot.timestamp, ), content_type="text/html", status=404, @@ -140,7 +143,7 @@ class SnapshotView(View): try: # try exact match on full url first snapshot = Snapshot.objects.get( - Q(url='http://' + path) | Q(url='https://' + path) + Q(url='http://' + path) | Q(url='https://' + path) | Q(id__startswith=path) ) except Snapshot.DoesNotExist: # fall back to match on exact base_url diff --git a/archivebox/templates/core/snapshot.html b/archivebox/templates/core/snapshot.html index beb0c683..94849b80 100644 --- a/archivebox/templates/core/snapshot.html +++ b/archivebox/templates/core/snapshot.html @@ -340,7 +340,7 @@ <a href="warc/" title="Any WARC archives for the page">WARC</a> | <a href="media/" title="Audio, Video, and Subtitle files.">Media</a> | <a href="git/" title="Any git repos at the url">Git</a> | - <a href="favicon.ico" title="Any git repos at the url">Favicon</a> | + <a href="/admin/core/snapshot/?id__startswith={{snapshot_id}}" title="Go to the Snapshot admin to update, overwrite, or delete this Snapshot">Actions</a> | <a href="/admin/core/snapshot/{{snapshot_id}}/change/" title="Edit this snapshot in the Admin UI">Admin</a> | <a href="." title="Webserver-provided index of files directory.">See all files...</a><br/> </div>