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 / models.py
Size: Mime:
from dj_kaos.utils.models import generate_upload_path
from django.db import models

from dj_kaos.building_blocks.configs import HasDescriptionModelConfig, HasMediaModelConfig
from dj_kaos.building_blocks.models import ArchivableModel, TimestampedModel, UUIDModel, SluggedModel, NamedModel
from dj_kaos.building_blocks.querysets import ArchivableQuerySet
from .history import ProxyAwareHistoricalRecords


class BasicOntologicalObject(TimestampedModel, UUIDModel):
    class Meta:
        abstract = True


class OntologicalObjectQuerySet(ArchivableQuerySet):
    pass


class OntologicalObject(
    ArchivableModel,
    BasicOntologicalObject
):
    history = ProxyAwareHistoricalRecords(inherit=True)

    objects = OntologicalObjectQuerySet.as_manager()

    class Meta:
        abstract = True


class SluggedOntologicalObject(
    SluggedModel,
    NamedModel,
    OntologicalObject,
):
    class Meta:
        abstract = True


def business_object_icon_upload_to(instance, filename):
    return generate_upload_path(instance, 'icon', filename)


def business_object_cover_photo_upload_to(instance, filename):
    return generate_upload_path(instance, 'cover_photo', filename)


class BusinessObject(
    NamedModel,
    OntologicalObject
):
    icon = models.ImageField(upload_to=business_object_icon_upload_to, blank=True)
    cover_photo = models.ImageField(upload_to=business_object_cover_photo_upload_to, blank=True)
    description = models.TextField(blank=True)

    class Meta:
        abstract = True

        config_mixins = (
            HasDescriptionModelConfig(),
            HasMediaModelConfig('icon', 'cover_photo'),
        )


class SluggedBusinessObject(
    SluggedModel,
    BusinessObject,
):
    class Meta:
        abstract = True


class DocumentObject(BusinessObject):
    content = models.TextField(blank=True)

    class Meta:
        abstract = True

        fields = ('content',)
        fieldsets = (
            ("Content", {'fields': fields}),
        )


class SluggedDocumentObject(
    SluggedModel,
    DocumentObject,
):
    class Meta:
        abstract = True


__all__ = (
    'BasicOntologicalObject',
    'OntologicalObjectQuerySet',
    'OntologicalObject',
    'SluggedOntologicalObject',
    'BusinessObject',
    'SluggedBusinessObject',
    'DocumentObject',
    'SluggedDocumentObject',
)