2019-07-15 09:53:58 +00:00
|
|
|
from django.conf import settings
|
2022-11-23 11:11:36 +00:00
|
|
|
from rest_framework import serializers
|
2019-07-15 09:53:58 +00:00
|
|
|
|
2019-07-09 14:03:41 +00:00
|
|
|
from . import models
|
|
|
|
|
|
|
|
|
|
|
|
class TagSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Tag
|
|
|
|
fields = ["name", "creation_date"]
|
2019-07-15 09:32:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TagNameField(serializers.CharField):
|
|
|
|
def to_internal_value(self, value):
|
|
|
|
value = super().to_internal_value(value)
|
|
|
|
if not models.TAG_REGEX.match(value):
|
2022-11-23 21:36:56 +00:00
|
|
|
raise serializers.ValidationError(f'Invalid tag "{value}"')
|
2019-07-15 09:32:14 +00:00
|
|
|
return value
|
2019-07-15 09:53:58 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TagsListField(serializers.ListField):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
kwargs.setdefault("min_length", 0)
|
|
|
|
kwargs.setdefault("child", TagNameField())
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
|
|
def to_internal_value(self, value):
|
|
|
|
value = super().to_internal_value(value)
|
|
|
|
if not value:
|
|
|
|
return value
|
|
|
|
# we ignore any extra tags if the length of the list is higher
|
|
|
|
# than our accepted size
|
|
|
|
return value[: settings.TAGS_MAX_BY_OBJ]
|