diff --git a/taiga/projects/tagging/api.py b/taiga/projects/tagging/api.py index c2dbd38a..db57b946 100644 --- a/taiga/projects/tagging/api.py +++ b/taiga/projects/tagging/api.py @@ -21,7 +21,7 @@ from taiga.base.decorators import detail_route from taiga.base.utils.collections import OrderedSet from . import services -from . import serializers +from . import validators class TagsColorsResourceMixin: @@ -38,27 +38,26 @@ class TagsColorsResourceMixin: self.check_permissions(request, "create_tag", project) self._raise_if_blocked(project) - serializer = serializers.CreateTagSerializer(data=request.DATA, project=project) - if not serializer.is_valid(): - return response.BadRequest(serializer.errors) + validator = validators.CreateTagValidator(data=request.DATA, project=project) + if not validator.is_valid(): + return response.BadRequest(validator.errors) - data = serializer.data + data = validator.data services.create_tag(project, data.get("tag"), data.get("color")) return response.Ok() - @detail_route(methods=["POST"]) def edit_tag(self, request, pk=None): project = self.get_object() self.check_permissions(request, "edit_tag", project) self._raise_if_blocked(project) - serializer = serializers.EditTagTagSerializer(data=request.DATA, project=project) - if not serializer.is_valid(): - return response.BadRequest(serializer.errors) + validator = validators.EditTagTagValidator(data=request.DATA, project=project) + if not validator.is_valid(): + return response.BadRequest(validator.errors) - data = serializer.data + data = validator.data services.edit_tag(project, data.get("from_tag"), to_tag=data.get("to_tag", None), @@ -66,18 +65,17 @@ class TagsColorsResourceMixin: return response.Ok() - @detail_route(methods=["POST"]) def delete_tag(self, request, pk=None): project = self.get_object() self.check_permissions(request, "delete_tag", project) self._raise_if_blocked(project) - serializer = serializers.DeleteTagSerializer(data=request.DATA, project=project) - if not serializer.is_valid(): - return response.BadRequest(serializer.errors) + validator = validators.DeleteTagValidator(data=request.DATA, project=project) + if not validator.is_valid(): + return response.BadRequest(validator.errors) - data = serializer.data + data = validator.data services.delete_tag(project, data.get("tag")) return response.Ok() @@ -88,11 +86,11 @@ class TagsColorsResourceMixin: self.check_permissions(request, "mix_tags", project) self._raise_if_blocked(project) - serializer = serializers.MixTagsSerializer(data=request.DATA, project=project) - if not serializer.is_valid(): - return response.BadRequest(serializer.errors) + validator = validators.MixTagsValidator(data=request.DATA, project=project) + if not validator.is_valid(): + return response.BadRequest(validator.errors) - data = serializer.data + data = validator.data services.mix_tags(project, data.get("from_tags"), data.get("to_tag")) return response.Ok() diff --git a/taiga/projects/tagging/serializers.py b/taiga/projects/tagging/validators.py similarity index 77% rename from taiga/projects/tagging/serializers.py rename to taiga/projects/tagging/validators.py index dc25b73a..595a5a3f 100644 --- a/taiga/projects/tagging/serializers.py +++ b/taiga/projects/tagging/validators.py @@ -19,6 +19,7 @@ from django.utils.translation import ugettext as _ from taiga.base.api import serializers +from taiga.base.api import validators from . import services from . import fields @@ -26,7 +27,7 @@ from . import fields import re -class ProjectTagSerializer(serializers.Serializer): +class ProjectTagValidator(validators.Validator): def __init__(self, *args, **kwargs): # Don't pass the extra project arg self.project = kwargs.pop("project") @@ -35,26 +36,26 @@ class ProjectTagSerializer(serializers.Serializer): super().__init__(*args, **kwargs) -class CreateTagSerializer(ProjectTagSerializer): +class CreateTagValidator(ProjectTagValidator): tag = serializers.CharField() color = serializers.CharField(required=False) def validate_tag(self, attrs, source): tag = attrs.get(source, None) if services.tag_exist_for_project_elements(self.project, tag): - raise serializers.ValidationError(_("The tag exists.")) + raise validators.ValidationError(_("The tag exists.")) return attrs def validate_color(self, attrs, source): color = attrs.get(source, None) if not re.match('^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$', color): - raise serializers.ValidationError(_("The color is not a valid HEX color.")) + raise validators.ValidationError(_("The color is not a valid HEX color.")) return attrs -class EditTagTagSerializer(ProjectTagSerializer): +class EditTagTagValidator(ProjectTagValidator): from_tag = serializers.CharField() to_tag = serializers.CharField(required=False) color = serializers.CharField(required=False) @@ -62,37 +63,37 @@ class EditTagTagSerializer(ProjectTagSerializer): def validate_from_tag(self, attrs, source): tag = attrs.get(source, None) if not services.tag_exist_for_project_elements(self.project, tag): - raise serializers.ValidationError(_("The tag doesn't exist.")) + raise validators.ValidationError(_("The tag doesn't exist.")) return attrs def validate_to_tag(self, attrs, source): tag = attrs.get(source, None) if services.tag_exist_for_project_elements(self.project, tag): - raise serializers.ValidationError(_("The tag exists yet")) + raise validators.ValidationError(_("The tag exists yet")) return attrs def validate_color(self, attrs, source): color = attrs.get(source, None) if not re.match('^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$', color): - raise serializers.ValidationError(_("The color is not a valid HEX color.")) + raise validators.ValidationError(_("The color is not a valid HEX color.")) return attrs -class DeleteTagSerializer(ProjectTagSerializer): +class DeleteTagValidator(ProjectTagValidator): tag = serializers.CharField() def validate_tag(self, attrs, source): tag = attrs.get(source, None) if not services.tag_exist_for_project_elements(self.project, tag): - raise serializers.ValidationError(_("The tag doesn't exist.")) + raise validators.ValidationError(_("The tag doesn't exist.")) return attrs -class MixTagsSerializer(ProjectTagSerializer): +class MixTagsValidator(ProjectTagValidator): from_tags = fields.TagsField() to_tag = serializers.CharField() @@ -100,13 +101,13 @@ class MixTagsSerializer(ProjectTagSerializer): tags = attrs.get(source, None) for tag in tags: if not services.tag_exist_for_project_elements(self.project, tag): - raise serializers.ValidationError(_("The tag doesn't exist.")) + raise validators.ValidationError(_("The tag doesn't exist.")) return attrs def validate_to_tag(self, attrs, source): tag = attrs.get(source, None) if not services.tag_exist_for_project_elements(self.project, tag): - raise serializers.ValidationError(_("The tag doesn't exist.")) + raise validators.ValidationError(_("The tag doesn't exist.")) return attrs