from django.contrib import admin from datetime import datetime from django.utils.html import format_html from api.auth import get_or_create_api_token def get_abid_info(self, obj, request=None): try: return format_html( # URL Hash: {}
''' {}     📖 API DOCS

    .abid:                   {}
    .abid.uuid:           {}
    .id:                       {}

    TS:                  {}   {}        {}: {}
    URI:                 {}     {}           {}: {}   SALT:   {}
    SUBTYPE:       {}           {}                           {}: {}
    RAND:             {}       {}                 {}: {}

    .old_id:                {}
''', obj.api_url + (f'?api_key={get_or_create_api_token(request.user)}' if request and request.user else ''), obj.api_url, obj.api_docs_url, str(obj.abid), str(obj.ABID.uuid), str(obj.id), obj.ABID.ts, str(obj.ABID.uuid)[0:14], obj.abid_ts_src, obj.abid_values['ts'].isoformat() if isinstance(obj.abid_values['ts'], datetime) else obj.abid_values['ts'], obj.ABID.uri, str(obj.ABID.uuid)[14:26], obj.abid_uri_src, str(obj.abid_values['uri']), obj.ABID.uri_salt, obj.ABID.subtype, str(obj.ABID.uuid)[26:28], obj.abid_subtype_src, str(obj.abid_values['subtype']), obj.ABID.rand, str(obj.ABID.uuid)[28:36], obj.abid_rand_src, str(obj.abid_values['rand'])[-7:], str(getattr(obj, 'old_id', '')), ) except Exception as e: return str(e) class ABIDModelAdmin(admin.ModelAdmin): list_display = ('created', 'created_by', 'abid', '__str__') sort_fields = ('created', 'created_by', 'abid', '__str__') readonly_fields = ('created', 'modified', '__str__', 'API') def API(self, obj): return get_abid_info(self, obj, request=self.request) def queryset(self, request): self.request = request return super().queryset(request) def change_view(self, request, object_id, form_url="", extra_context=None): self.request = request return super().change_view(request, object_id, form_url, extra_context) def get_form(self, request, obj=None, **kwargs): self.request = request 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()