From 18ebaed7ed28b43c5fa8a4c505ba8653e3c7f061 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Mon, 19 Aug 2024 18:34:01 -0700 Subject: [PATCH] fix admin UI display of tags --- archivebox/core/admin.py | 52 +++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index f441b9e5..20f7ae39 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -126,13 +126,18 @@ archivebox_admin.get_urls = get_urls(archivebox_admin.get_urls).__get__(archiveb class ArchiveResultInline(admin.TabularInline): model = ArchiveResult fk_name = 'snapshot' + extra = 1 -class TagInline(admin.TabularInline): - model = Snapshot.tags.through - # fk_name = 'snapshottag' - - def identifiers(self, obj): - return '-' +class TagInline(admin.StackedInline): + model = SnapshotTag + # fk_name = 'snapshot' + fields = ('id', 'tag') + extra = 1 + # min_num = 1 + max_num = 1000 + autocomplete_fields = ( + 'tag', + ) from django.contrib.admin.helpers import ActionForm from django.contrib.admin.widgets import AutocompleteSelectMultiple @@ -173,7 +178,8 @@ def get_abid_info(self, obj): return format_html( # URL Hash: {}
''' -     DB ID:                {}
+     DB PK:              {}
+        .old_id:            {}    
       .id:                    {}    
       .uuid:                {}    

@@ -190,8 +196,9 @@ def get_abid_info(self, obj): ''', obj.pk, - getattr(obj, 'id', str(getattr(obj, 'old_id', '')) + ' (.old_id)'), - getattr(obj, 'uuid', str(getattr(obj, 'id', '')) +' (.id)'), + getattr(obj, 'old_id', ''), + getattr(obj, 'id', ''), + getattr(obj, 'uuid', ''), *obj.abid.split('_', 1), obj.api_url, obj.api_docs_url, obj.ABID.ts, obj.abid_values['ts'].isoformat() if isinstance(obj.abid_values['ts'], datetime) else obj.abid_values['ts'], obj.ABID.uri, str(obj.abid_values['uri']), @@ -207,21 +214,28 @@ def get_abid_info(self, obj): class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin): list_display = ('added', 'title_str', 'files', 'size', 'url_str') sort_fields = ('title_str', 'url_str', 'added', 'files') - readonly_fields = ('admin_actions', 'status_info', 'bookmarked', 'added', 'updated', 'created', 'modified', 'identifiers') - search_fields = ('id', 'url', 'abid', 'uuid', 'timestamp', 'title', 'tags__name') - list_filter = ('added', 'updated', 'tags', 'archiveresult__status', 'created_by') - fields = ('url', 'timestamp', 'created_by', 'tags', 'title', *readonly_fields) + readonly_fields = ('tags', 'admin_actions', 'status_info', 'bookmarked', 'added', 'updated', 'created', 'modified', 'identifiers') + search_fields = ('id', 'url', 'abid', 'old_id', 'timestamp', 'title', 'tags__name') + list_filter = ('added', 'updated', 'archiveresult__status', 'created_by', 'tags') + fields = ('url', 'timestamp', 'created_by', 'title', *readonly_fields) ordering = ['-added'] actions = ['add_tags', 'remove_tags', 'update_titles', 'update_snapshots', 'resnapshot_snapshot', 'overwrite_snapshots', 'delete_snapshots'] autocomplete_fields = ['tags'] + # inlines = [TagInline, ArchiveResultInline] inlines = [ArchiveResultInline] list_per_page = SNAPSHOTS_PER_PAGE action_form = SnapshotActionForm + save_on_top = True + def changelist_view(self, request, extra_context=None): extra_context = extra_context or {} - return super().changelist_view(request, extra_context | GLOBAL_CONTEXT) + try: + return super().changelist_view(request, extra_context | GLOBAL_CONTEXT) + except Exception as e: + self.message_user(request, f'Error occurred while loading the page: {str(e)} {request.GET} {request.POST}') + return super().changelist_view(request, GLOBAL_CONTEXT) def get_urls(self): urls = super().get_urls() @@ -472,11 +486,11 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin): @admin.register(Tag, site=archivebox_admin) class TagAdmin(admin.ModelAdmin): - list_display = ('slug', 'name', 'num_snapshots', 'snapshots', 'abid') + list_display = ('slug', 'name', 'num_snapshots', 'snapshots', 'abid', 'id') sort_fields = ('id', 'name', 'slug', 'abid') - readonly_fields = ('created', 'modified', 'identifiers', 'num_snapshots', 'snapshots') + readonly_fields = ('id', 'uuid', 'abid', 'created', 'modified', 'identifiers', 'num_snapshots', 'snapshots') search_fields = ('id', 'abid', 'uuid', 'name', 'slug') - fields = ('name', 'slug', 'created_by', *readonly_fields, ) + fields = ('name', 'slug', 'created_by', *readonly_fields) actions = ['delete_selected'] ordering = ['-id'] @@ -508,9 +522,9 @@ class TagAdmin(admin.ModelAdmin): class ArchiveResultAdmin(admin.ModelAdmin): list_display = ('start_ts', 'snapshot_info', 'tags_str', 'extractor', 'cmd_str', 'status', 'output_str') sort_fields = ('start_ts', 'extractor', 'status') - readonly_fields = ('snapshot_info', 'tags_str', 'created_by', 'created', 'modified', 'identifiers') + readonly_fields = ('snapshot_info', 'tags_str', 'created', 'modified', 'identifiers') search_fields = ('id', 'uuid', 'abid', 'snapshot__url', 'extractor', 'output', 'cmd_version', 'cmd', 'snapshot__timestamp') - fields = ('snapshot', 'extractor', 'status', 'output', 'pwd', 'cmd', 'start_ts', 'end_ts', 'cmd_version', *readonly_fields) + fields = ('snapshot', 'extractor', 'status', 'output', 'pwd', 'cmd', 'start_ts', 'end_ts', 'created_by', 'cmd_version', *readonly_fields) autocomplete_fields = ['snapshot'] list_filter = ('status', 'extractor', 'start_ts', 'cmd_version')