Init Django-SHOP
This commit is contained in:
73
weirdlittleempire/management/translation.py
Normal file
73
weirdlittleempire/management/translation.py
Normal file
@@ -0,0 +1,73 @@
|
||||
"""
|
||||
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']
|
||||
Reference in New Issue
Block a user