49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
"""Utils app serializer."""
|
|
from rest_framework import serializers
|
|
from utils.models import PlatformMixin
|
|
from django.core import exceptions
|
|
from translation.models import Language
|
|
|
|
|
|
class EmptySerializer(serializers.Serializer):
|
|
"""Empty Serializer"""
|
|
|
|
|
|
class SourceSerializerMixin(serializers.Serializer):
|
|
"""Base authorization serializer mixin"""
|
|
source = serializers.ChoiceField(choices=PlatformMixin.SOURCES,
|
|
default=PlatformMixin.WEB,
|
|
write_only=True)
|
|
|
|
|
|
class TranslatedField(serializers.CharField):
|
|
"""Translated field."""
|
|
|
|
def __init__(self, allow_null=True, required=False, read_only=True,
|
|
**kwargs):
|
|
super().__init__(allow_null=allow_null, required=required,
|
|
read_only=read_only, **kwargs)
|
|
|
|
|
|
def validate_tjson(value):
|
|
|
|
if not isinstance(value, dict):
|
|
raise exceptions.ValidationError(
|
|
'invalid_json',
|
|
code='invalid_json',
|
|
params={'value': value},
|
|
)
|
|
|
|
lang_count = Language.objects.filter(locale__in=value.keys()).count()
|
|
|
|
if lang_count == 0:
|
|
raise exceptions.ValidationError(
|
|
'invalid_translated_keys',
|
|
code='invalid_translated_keys',
|
|
params={'value': value},
|
|
)
|
|
|
|
|
|
class TJSONSerializer(serializers.JSONField):
|
|
validators = [validate_tjson]
|