74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
"""
|
|
These serializer mixinins and fields are used exclusively to import the file
|
|
``workdir/fixtures/products-meta.json``. They are not intended for general
|
|
purpose and can be deleted thereafter.
|
|
"""
|
|
from rest_framework import serializers
|
|
|
|
|
|
class TranslatableModelSerializerMixin:
|
|
"""
|
|
Pseudo class mimicking the behaviour of :class:`parler_rest.TranslatableModelSerializerMixin`.
|
|
It converts the content for fields of type TranslatedFieldsField to simple serializer
|
|
fields.
|
|
"""
|
|
|
|
def to_internal_value(self, data):
|
|
data = self._unify_translated_data(data)
|
|
result = super().to_internal_value(data)
|
|
return result
|
|
|
|
def _unify_translated_data(self, data):
|
|
"""
|
|
Unify translated data to be used by simple serializer fields.
|
|
"""
|
|
for field_name, field in self.get_fields().items():
|
|
if isinstance(field, TranslatedFieldsField):
|
|
key = field.source or field_name
|
|
translations = data.pop(key, None)
|
|
if isinstance(translations, dict):
|
|
data.update(translations.get('en', {}))
|
|
return data
|
|
|
|
|
|
class TranslatedFieldsField(serializers.Field):
|
|
"""
|
|
Pseudo class mimicking the behaviour of :class:`parler_rest.TranslatedFieldsField`, where only
|
|
the English translation is used.
|
|
"""
|
|
|
|
def to_representation(self, value):
|
|
raise NotImplementedError(
|
|
"If USE_I18N is False, do not use {cls}.to_representation() for field '{field_name}'. "
|
|
"It thwarts the possibility to reuse that string in a multi language environment.".format(
|
|
cls=self.__class__.__name__,
|
|
field_name=self.field_name,
|
|
)
|
|
)
|
|
|
|
def validate_empty_values(self, data):
|
|
raise serializers.SkipField()
|
|
|
|
|
|
class TranslatedField(serializers.Field):
|
|
"""
|
|
Pseudo class mimicking the behaviour of :class:`parler_rest.TranslatedField`, where only
|
|
the English translation is used.
|
|
"""
|
|
|
|
def to_representation(self, value):
|
|
raise NotImplementedError(
|
|
"If USE_I18N is False, do not use {cls}.to_representation() for field '{field_name}'. "
|
|
"It thwarts the possibility to reuse that string in a multi language environment.".format(
|
|
cls=self.__class__.__name__,
|
|
field_name=self.field_name,
|
|
)
|
|
)
|
|
|
|
def to_internal_value(self, data):
|
|
return data.get('en')
|
|
|
|
|
|
__all__ = ['TranslatedFieldsField', 'TranslatedField',
|
|
'TranslatableModelSerializerMixin']
|