diff --git a/archivebox/abid_utils/admin.py b/archivebox/abid_utils/admin.py new file mode 100644 index 00000000..31527983 --- /dev/null +++ b/archivebox/abid_utils/admin.py @@ -0,0 +1,18 @@ +from django.contrib import admin + + +class ABIDModelAdmin(admin.ModelAdmin): + list_display = ('created', 'created_by', 'abid', '__str__') + sort_fields = ('created', 'created_by', 'abid', '__str__') + readonly_fields = ('abid', 'created', '__str__') + + def get_form(self, request, obj=None, **kwargs): + form = super().get_form(request, obj, **kwargs) + if 'created_by' in form.base_fields: + form.base_fields['created_by'].initial = request.user + return form + + # def save_model(self, request, obj, form, change): + # if getattr(obj, 'created_by_id', None) in (None, get_or_create_system_user_pk()): + # obj.created_by = request.user + # obj.save() diff --git a/archivebox/abid_utils/models.py b/archivebox/abid_utils/models.py index 054336c5..e5502cea 100644 --- a/archivebox/abid_utils/models.py +++ b/archivebox/abid_utils/models.py @@ -93,7 +93,6 @@ class ABIDModel(models.Model): super().save(*args, **kwargs) assert str(self.id) == str(self.ABID.uuid), f'self.id {self.id} does not match self.ABID {self.ABID.uuid}' assert str(self.abid) == str(self.ABID), f'self.abid {self.id} does not match self.ABID {self.ABID.uuid}' - @property def abid_values(self) -> Dict[str, Any]: diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index 530e9b71..183bbb14 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -29,9 +29,10 @@ from ..util import htmldecode, urldecode, ansi_to_html from core.models import Snapshot, ArchiveResult, Tag, SnapshotTag from core.forms import AddLinkForm - from core.mixins import SearchResultsAdminMixin from api.models import APIToken +from abid_utils.models import get_or_create_system_user_pk +from abid_utils.admin import ABIDModelAdmin from index.html import snapshot_icons from logging_util import printable_filesize @@ -109,8 +110,6 @@ class ArchiveBoxAdmin(admin.AdminSite): archivebox_admin = ArchiveBoxAdmin() archivebox_admin.register(get_user_model()) -archivebox_admin.register(APIToken) -archivebox_admin.register(get_webhook_model(), WebhookAdmin) archivebox_admin.disable_action('delete_selected') # archivebox_admin.register(CustomPlugin) @@ -226,7 +225,7 @@ def get_abid_info(self, obj): @admin.register(Snapshot, site=archivebox_admin) -class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin): +class SnapshotAdmin(SearchResultsAdminMixin, ABIDModelAdmin): class Meta: model = Snapshot @@ -519,7 +518,7 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin): # @admin.register(SnapshotTag, site=archivebox_admin) -# class SnapshotTagAdmin(admin.ModelAdmin): +# class SnapshotTagAdmin(ABIDModelAdmin): # list_display = ('id', 'snapshot', 'tag') # sort_fields = ('id', 'snapshot', 'tag') # search_fields = ('id', 'snapshot_id', 'tag_id') @@ -532,7 +531,7 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin): @admin.register(Tag, site=archivebox_admin) -class TagAdmin(admin.ModelAdmin): +class TagAdmin(ABIDModelAdmin): list_display = ('abid', 'name', 'created', 'created_by', 'num_snapshots', 'snapshots') sort_fields = ('name', 'slug', 'abid', 'created_by', 'created') readonly_fields = ('slug', 'abid', 'created', 'modified', 'API', 'num_snapshots', 'snapshots') @@ -568,7 +567,7 @@ class TagAdmin(admin.ModelAdmin): @admin.register(ArchiveResult, site=archivebox_admin) -class ArchiveResultAdmin(admin.ModelAdmin): +class ArchiveResultAdmin(ABIDModelAdmin): list_display = ('start_ts', 'snapshot_info', 'tags_str', 'extractor', 'cmd_str', 'status', 'output_str') sort_fields = ('start_ts', 'extractor', 'status') readonly_fields = ('cmd_str', 'snapshot_info', 'tags_str', 'created', 'modified', 'API', 'output_summary') @@ -648,3 +647,23 @@ class ArchiveResultAdmin(admin.ModelAdmin): output_str += format_html('{}{}
', int(not is_hidden), indentation_str, filename.strip()) return output_str + format_html('') + + + +@admin.register(APIToken, site=archivebox_admin) +class APITokenAdmin(ABIDModelAdmin): + list_display = ('created', 'abid', 'created_by', 'token_redacted', 'expires') + sort_fields = ('abid', 'created', 'created_by', 'expires') + readonly_fields = ('abid', 'created') + search_fields = ('id', 'abid', 'created_by__username', 'token') + fields = ('created_by', 'token', 'expires', *readonly_fields) + + list_filter = ('created_by',) + ordering = ['-created'] + list_per_page = 100 + +@admin.register(get_webhook_model(), site=archivebox_admin) +class CustomWebhookAdmin(WebhookAdmin, ABIDModelAdmin): + list_display = ('created', 'created_by', 'abid', *WebhookAdmin.list_display) + sort_fields = ('created', 'created_by', 'abid', 'referenced_model', 'endpoint', 'last_success', 'last_error') + readonly_fields = ('abid', 'created', *WebhookAdmin.readonly_fields)