"""Base admin classes for models using UUIDv7.""" __package__ = 'archivebox.base_models' from django.contrib import admin from django.utils.html import format_html, mark_safe from django_object_actions import DjangoObjectActions class ConfigEditorMixin: """ Mixin for admin classes with a config JSON field. Provides a readonly field that shows available config options from all discovered plugin schemas. """ @admin.display(description='Available Config Options') def available_config_options(self, obj): """Show documentation for available config keys.""" try: from archivebox.hooks import discover_plugin_configs plugin_configs = discover_plugin_configs() except ImportError: return format_html('Plugin config system not available') html_parts = [ '
', '', 'Click to see available config keys ({})'.format( sum(len(s.get('properties', {})) for s in plugin_configs.values()) ), '
', ] for plugin_name, schema in sorted(plugin_configs.items()): properties = schema.get('properties', {}) if not properties: continue html_parts.append(f'
{plugin_name}
') html_parts.append('') html_parts.append('') for key, prop in sorted(properties.items()): prop_type = prop.get('type', 'string') default = prop.get('default', '') description = prop.get('description', '') # Truncate long defaults default_str = str(default) if len(default_str) > 30: default_str = default_str[:27] + '...' html_parts.append( f'' f'' f'' f'' f'' f'' ) html_parts.append('
KeyTypeDefaultDescription
{key}{prop_type}{default_str}{description}
') html_parts.append('
') html_parts.append( '

' 'Usage: Add key-value pairs in JSON format, e.g., ' '{"SAVE_WGET": false, "WGET_TIMEOUT": 120}' '

' ) return mark_safe(''.join(html_parts)) class BaseModelAdmin(DjangoObjectActions, admin.ModelAdmin): list_display = ('id', 'created_at', 'created_by') readonly_fields = ('id', 'created_at', 'modified_at') 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