lib.itmens/catalog/models.py
2023-06-19 13:10:11 -04:00

103 lines
3 KiB
Python

from .common.models import ExternalResource, Item, ItemSchema
from .book.models import Edition, Work, Series, EditionSchema, EditionInSchema
from .movie.models import Movie, MovieSchema, MovieInSchema
from .tv.models import (
TVShow,
TVSeason,
TVEpisode,
TVShowSchema,
TVShowInSchema,
TVSeasonSchema,
TVSeasonInSchema,
)
from .music.models import Album, AlbumSchema, AlbumInSchema
from .game.models import Game, GameSchema, GameInSchema
from .podcast.models import Podcast, PodcastSchema, PodcastInSchema, PodcastEpisode
from .performance.models import (
Performance,
PerformanceProduction,
PerformanceSchema,
PerformanceProductionSchema,
)
from .collection.models import Collection as CatalogCollection
from .search.models import Indexer
from django.contrib.contenttypes.models import ContentType
from django.conf import settings
import logging
from auditlog.registry import auditlog
_logger = logging.getLogger(__name__)
# class Exhibition(Item):
# class Meta:
# proxy = True
# class Fanfic(Item):
# class Meta:
# proxy = True
_CATEGORY_LIST = None
_CONTENT_TYPE_LIST = None
def all_content_types():
global _CONTENT_TYPE_LIST
if _CONTENT_TYPE_LIST is None:
_CONTENT_TYPE_LIST = {}
for cls in Item.__subclasses__():
_CONTENT_TYPE_LIST[cls] = ContentType.objects.get(
app_label="catalog", model=cls.__name__.lower()
).id
return _CONTENT_TYPE_LIST
def all_categories():
global _CATEGORY_LIST
if _CATEGORY_LIST is None:
_CATEGORY_LIST = {}
for cls in Item.__subclasses__():
c = getattr(cls, "category", None)
if c not in _CATEGORY_LIST:
_CATEGORY_LIST[c] = [cls]
else:
_CATEGORY_LIST[c].append(cls)
return _CATEGORY_LIST
def init_catalog_search_models():
if settings.DISABLE_MODEL_SIGNAL:
_logger.warn(
"Catalog models are not being indexed with DISABLE_MODEL_SIGNAL configuration"
)
return
# skip indexing if the item type should never show up in search
Indexer.update_model_indexable(Edition)
# Indexer.update_model_indexable(Work)
Indexer.update_model_indexable(Movie)
Indexer.update_model_indexable(TVShow)
Indexer.update_model_indexable(TVSeason)
Indexer.update_model_indexable(Album)
Indexer.update_model_indexable(Game)
Indexer.update_model_indexable(Podcast)
Indexer.update_model_indexable(Performance)
# Indexer.update_model_indexable(PerformanceProduction)
# Indexer.update_model_indexable(CatalogCollection)
def init_catalog_audit_log():
for cls in Item.__subclasses__():
auditlog.register(
cls,
exclude_fields=["metadata", "created_time", "edited_time", "last_editor"],
)
auditlog.register(
ExternalResource, include_fields=["item", "id_type", "id_value", "url"]
)
Item._content_type_ids = list(all_content_types().values())