20 lines
690 B
Python
20 lines
690 B
Python
from __future__ import annotations
|
|
|
|
from django.core.exceptions import ValidationError
|
|
|
|
|
|
class MultilingualValidationMixin:
|
|
"""Opt-in mixin for project models that want explicit clean()-time enforcement."""
|
|
|
|
def clean(self):
|
|
from .types import format_issue
|
|
from .validators.multilingual import validate_snippet_instance
|
|
|
|
super_clean = getattr(super(), "clean", None)
|
|
if callable(super_clean):
|
|
super_clean()
|
|
issues = validate_snippet_instance(self)
|
|
blocking = [issue for issue in issues if issue.blocks]
|
|
if blocking:
|
|
raise ValidationError({"content_guard": [format_issue(issue) for issue in blocking]})
|