Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dj-kaos / ontology / admin.py
Size: Mime:
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',
)