Files
consumocuidado-server/utils/tag_serializers.py
2021-01-26 12:16:46 +00:00

48 lines
1.2 KiB
Python

# -*- coding: utf-8 -*-
import json
# Third party
import six
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
class SingleTag(str):
def __init__(self, *args, **kwargs):
pass
def __str__(self):
return json.dumps(self)
class SingleTagSerializerField(serializers.Field):
child = serializers.CharField()
default_error_messages = {
'invalid_json': _('Invalid json str. A tag list submitted in string'
' form must be valid json.'),
'not_a_str': _('Expected a string but got type "{input_type}".')
}
order_by = None
def __init__(self, **kwargs):
super(SingleTagSerializerField, self).__init__(**kwargs)
def to_internal_value(self, value):
if isinstance(value, six.string_types):
if not value:
value = ""
if not isinstance(value, str):
self.fail('not_a_str', input_type=type(value).__name__)
return value
def to_representation(self, value):
if not isinstance(value, SingleTag):
if not isinstance(value, str):
value = value.name
value = SingleTag(value)
return value