"""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())
),
'')
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'Key Type Default Description '
f' '
)
html_parts.append('{key} '
f'{prop_type} '
f'{default_str} '
f'{description} '
f'
'
'Usage: Add key-value pairs in JSON format, e.g., '
'{"SAVE_WGET": false, "WGET_TIMEOUT": 120}'
'