Migrating tagging validators

remotes/origin/issue/4795/notification_even_they_are_disabled
Jesús Espino 2016-07-05 19:59:49 +02:00
parent 7d2b6c34ce
commit cbec0caca2
2 changed files with 31 additions and 32 deletions

View File

@ -21,7 +21,7 @@ from taiga.base.decorators import detail_route
from taiga.base.utils.collections import OrderedSet from taiga.base.utils.collections import OrderedSet
from . import services from . import services
from . import serializers from . import validators
class TagsColorsResourceMixin: class TagsColorsResourceMixin:
@ -38,27 +38,26 @@ class TagsColorsResourceMixin:
self.check_permissions(request, "create_tag", project) self.check_permissions(request, "create_tag", project)
self._raise_if_blocked(project) self._raise_if_blocked(project)
serializer = serializers.CreateTagSerializer(data=request.DATA, project=project) validator = validators.CreateTagValidator(data=request.DATA, project=project)
if not serializer.is_valid(): if not validator.is_valid():
return response.BadRequest(serializer.errors) return response.BadRequest(validator.errors)
data = serializer.data data = validator.data
services.create_tag(project, data.get("tag"), data.get("color")) services.create_tag(project, data.get("tag"), data.get("color"))
return response.Ok() return response.Ok()
@detail_route(methods=["POST"]) @detail_route(methods=["POST"])
def edit_tag(self, request, pk=None): def edit_tag(self, request, pk=None):
project = self.get_object() project = self.get_object()
self.check_permissions(request, "edit_tag", project) self.check_permissions(request, "edit_tag", project)
self._raise_if_blocked(project) self._raise_if_blocked(project)
serializer = serializers.EditTagTagSerializer(data=request.DATA, project=project) validator = validators.EditTagTagValidator(data=request.DATA, project=project)
if not serializer.is_valid(): if not validator.is_valid():
return response.BadRequest(serializer.errors) return response.BadRequest(validator.errors)
data = serializer.data data = validator.data
services.edit_tag(project, services.edit_tag(project,
data.get("from_tag"), data.get("from_tag"),
to_tag=data.get("to_tag", None), to_tag=data.get("to_tag", None),
@ -66,18 +65,17 @@ class TagsColorsResourceMixin:
return response.Ok() return response.Ok()
@detail_route(methods=["POST"]) @detail_route(methods=["POST"])
def delete_tag(self, request, pk=None): def delete_tag(self, request, pk=None):
project = self.get_object() project = self.get_object()
self.check_permissions(request, "delete_tag", project) self.check_permissions(request, "delete_tag", project)
self._raise_if_blocked(project) self._raise_if_blocked(project)
serializer = serializers.DeleteTagSerializer(data=request.DATA, project=project) validator = validators.DeleteTagValidator(data=request.DATA, project=project)
if not serializer.is_valid(): if not validator.is_valid():
return response.BadRequest(serializer.errors) return response.BadRequest(validator.errors)
data = serializer.data data = validator.data
services.delete_tag(project, data.get("tag")) services.delete_tag(project, data.get("tag"))
return response.Ok() return response.Ok()
@ -88,11 +86,11 @@ class TagsColorsResourceMixin:
self.check_permissions(request, "mix_tags", project) self.check_permissions(request, "mix_tags", project)
self._raise_if_blocked(project) self._raise_if_blocked(project)
serializer = serializers.MixTagsSerializer(data=request.DATA, project=project) validator = validators.MixTagsValidator(data=request.DATA, project=project)
if not serializer.is_valid(): if not validator.is_valid():
return response.BadRequest(serializer.errors) return response.BadRequest(validator.errors)
data = serializer.data data = validator.data
services.mix_tags(project, data.get("from_tags"), data.get("to_tag")) services.mix_tags(project, data.get("from_tags"), data.get("to_tag"))
return response.Ok() return response.Ok()

View File

@ -19,6 +19,7 @@
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from taiga.base.api import serializers from taiga.base.api import serializers
from taiga.base.api import validators
from . import services from . import services
from . import fields from . import fields
@ -26,7 +27,7 @@ from . import fields
import re import re
class ProjectTagSerializer(serializers.Serializer): class ProjectTagValidator(validators.Validator):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# Don't pass the extra project arg # Don't pass the extra project arg
self.project = kwargs.pop("project") self.project = kwargs.pop("project")
@ -35,26 +36,26 @@ class ProjectTagSerializer(serializers.Serializer):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
class CreateTagSerializer(ProjectTagSerializer): class CreateTagValidator(ProjectTagValidator):
tag = serializers.CharField() tag = serializers.CharField()
color = serializers.CharField(required=False) color = serializers.CharField(required=False)
def validate_tag(self, attrs, source): def validate_tag(self, attrs, source):
tag = attrs.get(source, None) tag = attrs.get(source, None)
if services.tag_exist_for_project_elements(self.project, tag): if services.tag_exist_for_project_elements(self.project, tag):
raise serializers.ValidationError(_("The tag exists.")) raise validators.ValidationError(_("The tag exists."))
return attrs return attrs
def validate_color(self, attrs, source): def validate_color(self, attrs, source):
color = attrs.get(source, None) color = attrs.get(source, None)
if not re.match('^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$', color): 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 return attrs
class EditTagTagSerializer(ProjectTagSerializer): class EditTagTagValidator(ProjectTagValidator):
from_tag = serializers.CharField() from_tag = serializers.CharField()
to_tag = serializers.CharField(required=False) to_tag = serializers.CharField(required=False)
color = serializers.CharField(required=False) color = serializers.CharField(required=False)
@ -62,37 +63,37 @@ class EditTagTagSerializer(ProjectTagSerializer):
def validate_from_tag(self, attrs, source): def validate_from_tag(self, attrs, source):
tag = attrs.get(source, None) tag = attrs.get(source, None)
if not services.tag_exist_for_project_elements(self.project, tag): 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 return attrs
def validate_to_tag(self, attrs, source): def validate_to_tag(self, attrs, source):
tag = attrs.get(source, None) tag = attrs.get(source, None)
if services.tag_exist_for_project_elements(self.project, tag): 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 return attrs
def validate_color(self, attrs, source): def validate_color(self, attrs, source):
color = attrs.get(source, None) color = attrs.get(source, None)
if not re.match('^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$', color): 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 return attrs
class DeleteTagSerializer(ProjectTagSerializer): class DeleteTagValidator(ProjectTagValidator):
tag = serializers.CharField() tag = serializers.CharField()
def validate_tag(self, attrs, source): def validate_tag(self, attrs, source):
tag = attrs.get(source, None) tag = attrs.get(source, None)
if not services.tag_exist_for_project_elements(self.project, tag): 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 return attrs
class MixTagsSerializer(ProjectTagSerializer): class MixTagsValidator(ProjectTagValidator):
from_tags = fields.TagsField() from_tags = fields.TagsField()
to_tag = serializers.CharField() to_tag = serializers.CharField()
@ -100,13 +101,13 @@ class MixTagsSerializer(ProjectTagSerializer):
tags = attrs.get(source, None) tags = attrs.get(source, None)
for tag in tags: for tag in tags:
if not services.tag_exist_for_project_elements(self.project, tag): 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 return attrs
def validate_to_tag(self, attrs, source): def validate_to_tag(self, attrs, source):
tag = attrs.get(source, None) tag = attrs.get(source, None)
if not services.tag_exist_for_project_elements(self.project, tag): 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 return attrs