Repository URL to install this package:
Version:
0.2.0a9 ▾
|
from __future__ import annotations
from django.contrib import admin
from django.contrib.admin.options import BaseModelAdmin
from django.utils.html import format_html, format_html_join
from simple_history.admin import SimpleHistoryAdmin
from dj_kaos.building_blocks.admin import ArchivableAdmin, BaseSluggedModelAdmin
from dj_kaos.models.admin import BaseKaosModelAdmin, KaosModelAdmin
from dj_kaos.ontology.mixins import HasWarningsMixin
class BaseOntologicalObjectAdmin(BaseKaosModelAdmin):
pass
class OntologicalObjectAdmin(
SimpleHistoryAdmin,
ArchivableAdmin,
BaseOntologicalObjectAdmin,
KaosModelAdmin,
):
pass
class BaseSluggedOntologicalObjectAdmin(BaseSluggedModelAdmin, BaseOntologicalObjectAdmin):
pass
class SluggedOntologicalObjectAdmin(BaseSluggedOntologicalObjectAdmin, OntologicalObjectAdmin):
pass
class BaseBusinessObjectAdmin(BaseOntologicalObjectAdmin):
pass
class BusinessObjectAdmin(
BaseBusinessObjectAdmin,
OntologicalObjectAdmin
):
pass
class BaseSluggedBusinessObjectAdmin(BaseSluggedModelAdmin, BaseBusinessObjectAdmin):
pass
class SluggedBusinessObjectAdmin(BaseSluggedBusinessObjectAdmin, BusinessObjectAdmin):
pass
class BaseDocumentObjectAdmin(BaseBusinessObjectAdmin):
pass
class DocumentObjectAdmin(
BaseDocumentObjectAdmin,
BusinessObjectAdmin
):
pass
class BaseSluggedDocumentObjectAdmin(BaseSluggedModelAdmin, BaseDocumentObjectAdmin):
pass
class SluggedDocumentObjectAdmin(BaseSluggedDocumentObjectAdmin, DocumentObjectAdmin):
pass
__all__ = (
'BaseOntologicalObjectAdmin',
'OntologicalObjectAdmin',
'BaseSluggedOntologicalObjectAdmin',
'SluggedOntologicalObjectAdmin',
'BaseBusinessObjectAdmin',
'BusinessObjectAdmin',
'BaseSluggedBusinessObjectAdmin',
'SluggedBusinessObjectAdmin',
'BaseDocumentObjectAdmin',
'DocumentObjectAdmin',
'BaseSluggedDocumentObjectAdmin',
'SluggedDocumentObjectAdmin',
)
class HasWarningsAdmin(BaseModelAdmin):
"""
A Django ModelAdmin class to display warnings associated with an object of `HasWarnings` class.
"""
readonly_fields = ('warnings_display',)
fieldsets = (
("Warnings", {'fields': ('warnings_display',)}),
)
@admin.display(description="warnings")
def warnings_display(self, obj: HasWarningsMixin):
"""
Return the processed warnings of the object as an ordered list in HTML format.
:param obj: an object of `HasWarnings` class
:type obj: HasWarnings
:return: warnings as an ordered list in HTML format
:rtype: str
"""
if not obj:
return
processed_warnings = (
warning if isinstance(warning, str) else format_html("<code>{}</code>: {}", *warning)
for warning in obj.get_warnings()
)
return format_html(
"<ol>{}</ol>",
format_html_join('\n', '<li>{}</li>', zip(processed_warnings))
)
__all__ += (
'HasWarningsAdmin',
)