27 lines
747 B
Python
27 lines
747 B
Python
from __future__ import annotations
|
|
|
|
from functools import lru_cache
|
|
|
|
from django.db.models.signals import pre_save
|
|
from django.dispatch import receiver
|
|
from wagtail.models import Page
|
|
from wagtail.snippets.models import get_snippet_models
|
|
|
|
from .validators.multilingual import validate_instance_or_raise
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def _snippet_models():
|
|
return tuple(get_snippet_models())
|
|
|
|
|
|
def _is_snippet_instance(instance) -> bool:
|
|
instance_model = instance.__class__
|
|
return any(model == instance_model for model in _snippet_models())
|
|
|
|
|
|
@receiver(pre_save)
|
|
def enforce_multilingual_integrity(sender, instance, **kwargs):
|
|
if isinstance(instance, Page) or _is_snippet_instance(instance):
|
|
validate_instance_or_raise(instance)
|