Moving ValidationError to taiga.base.exceptions
parent
6e3eeb7cca
commit
9c8a630fc6
|
@ -17,11 +17,11 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.core import validators as core_validators
|
from django.core import validators as core_validators
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
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 taiga.base.api import validators
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class BaseRegisterValidator(validators.Validator):
|
||||||
try:
|
try:
|
||||||
validator(value)
|
validator(value)
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
raise serializers.ValidationError(_("Required. 255 characters or fewer. Letters, numbers "
|
raise ValidationError(_("Required. 255 characters or fewer. Letters, numbers "
|
||||||
"and /./-/_ characters'"))
|
"and /./-/_ characters'"))
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ They are very similar to Django's form fields.
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import validators
|
from django.core import validators
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.db.models.fields import BLANK_CHOICE_DASH
|
from django.db.models.fields import BLANK_CHOICE_DASH
|
||||||
from django.forms import widgets
|
from django.forms import widgets
|
||||||
from django.http import QueryDict
|
from django.http import QueryDict
|
||||||
|
@ -66,6 +65,8 @@ from django.utils.functional import Promise
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
from . import ISO_8601
|
from . import ISO_8601
|
||||||
from .settings import api_settings
|
from .settings import api_settings
|
||||||
|
|
||||||
|
|
|
@ -44,12 +44,12 @@
|
||||||
|
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.db import transaction as tx
|
from django.db import transaction as tx
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from taiga.base import response
|
from taiga.base import response
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
from .settings import api_settings
|
from .settings import api_settings
|
||||||
from .utils import get_object_or_404
|
from .utils import get_object_or_404
|
||||||
|
|
|
@ -48,7 +48,7 @@ Serializer fields that deal with relationships.
|
||||||
These fields allow you to specify the style that should be used to represent
|
These fields allow you to specify the style that should be used to represent
|
||||||
model relationships, including hyperlinks, primary keys, or slugs.
|
model relationships, including hyperlinks, primary keys, or slugs.
|
||||||
"""
|
"""
|
||||||
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.urlresolvers import resolve, get_script_prefix, NoReverseMatch
|
from django.core.urlresolvers import resolve, get_script_prefix, NoReverseMatch
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db.models.fields import BLANK_CHOICE_DASH
|
from django.db.models.fields import BLANK_CHOICE_DASH
|
||||||
|
@ -59,6 +59,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from .fields import Field, WritableField, get_component, is_simple_callable
|
from .fields import Field, WritableField, get_component, is_simple_callable
|
||||||
from .reverse import reverse
|
from .reverse import reverse
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
import warnings
|
import warnings
|
||||||
from urllib import parse as urlparse
|
from urllib import parse as urlparse
|
||||||
|
|
|
@ -78,6 +78,8 @@ import serpy
|
||||||
# This helps keep the separation between model fields, form fields, and
|
# This helps keep the separation between model fields, form fields, and
|
||||||
# serializer fields more explicit.
|
# serializer fields more explicit.
|
||||||
|
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
from .relations import *
|
from .relations import *
|
||||||
from .fields import *
|
from .fields import *
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ In addition Django's built in 403 and 404 exceptions are handled.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied as DjangoPermissionDenied
|
from django.core.exceptions import PermissionDenied as DjangoPermissionDenied
|
||||||
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_text
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
@ -224,6 +225,7 @@ class NotEnoughSlotsForProject(BaseException):
|
||||||
"total_memberships": total_memberships
|
"total_memberships": total_memberships
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def format_exception(exc):
|
def format_exception(exc):
|
||||||
if isinstance(exc.detail, (dict, list, tuple,)):
|
if isinstance(exc.detail, (dict, list, tuple,)):
|
||||||
detail = exc.detail
|
detail = exc.detail
|
||||||
|
@ -270,3 +272,6 @@ def exception_handler(exc):
|
||||||
|
|
||||||
# Note: Unhandled exceptions will raise a 500 error.
|
# Note: Unhandled exceptions will raise a 500 error.
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
ValidationError = DjangoValidationError
|
||||||
|
|
|
@ -23,11 +23,11 @@ from collections import OrderedDict
|
||||||
|
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.api import serializers
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
from taiga.base.fields import JsonField
|
from taiga.base.fields import JsonField
|
||||||
from taiga.mdrender.service import render as mdrender
|
from taiga.mdrender.service import render as mdrender
|
||||||
from taiga.users import models as users_models
|
from taiga.users import models as users_models
|
||||||
|
|
|
@ -16,13 +16,11 @@
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import copy
|
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
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.fields import JsonField, PgArrayField
|
from taiga.base.fields import JsonField, PgArrayField
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
from taiga.projects import models as projects_models
|
from taiga.projects import models as projects_models
|
||||||
from taiga.projects.custom_attributes import models as custom_attributes_models
|
from taiga.projects.custom_attributes import models as custom_attributes_models
|
||||||
|
@ -31,15 +29,12 @@ from taiga.projects.tasks import models as tasks_models
|
||||||
from taiga.projects.issues import models as issues_models
|
from taiga.projects.issues import models as issues_models
|
||||||
from taiga.projects.milestones import models as milestones_models
|
from taiga.projects.milestones import models as milestones_models
|
||||||
from taiga.projects.wiki import models as wiki_models
|
from taiga.projects.wiki import models as wiki_models
|
||||||
from taiga.projects.history import models as history_models
|
|
||||||
from taiga.projects.attachments import models as attachments_models
|
|
||||||
from taiga.timeline import models as timeline_models
|
from taiga.timeline import models as timeline_models
|
||||||
from taiga.users import models as users_models
|
from taiga.users import models as users_models
|
||||||
from taiga.projects.votes import services as votes_service
|
from taiga.projects.votes import services as votes_service
|
||||||
|
|
||||||
from .fields import (FileField, RelatedNoneSafeField, UserRelatedField,
|
from .fields import (FileField, UserRelatedField,
|
||||||
UserPkField, CommentField, ProjectRelatedField,
|
ProjectRelatedField,
|
||||||
HistoryUserField, HistoryValuesField, HistoryDiffField,
|
|
||||||
TimelineDataField, ContentTypeField)
|
TimelineDataField, ContentTypeField)
|
||||||
from .mixins import (HistoryExportSerializerMixin,
|
from .mixins import (HistoryExportSerializerMixin,
|
||||||
AttachmentExportSerializerMixin,
|
AttachmentExportSerializerMixin,
|
||||||
|
@ -158,6 +153,7 @@ class BaseCustomAttributesValuesExportSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
class UserStoryCustomAttributesValuesExportSerializer(BaseCustomAttributesValuesExportSerializer):
|
class UserStoryCustomAttributesValuesExportSerializer(BaseCustomAttributesValuesExportSerializer):
|
||||||
_custom_attribute_model = custom_attributes_models.UserStoryCustomAttribute
|
_custom_attribute_model = custom_attributes_models.UserStoryCustomAttribute
|
||||||
_container_model = "userstories.UserStory"
|
_container_model = "userstories.UserStory"
|
||||||
|
@ -224,7 +220,7 @@ class MilestoneExportSerializer(WatcheableObjectModelSerializerMixin):
|
||||||
name = attrs[source]
|
name = attrs[source]
|
||||||
qs = self.project.milestones.filter(name=name)
|
qs = self.project.milestones.filter(name=name)
|
||||||
if qs.exists():
|
if qs.exists():
|
||||||
raise serializers.ValidationError(_("Name duplicated for the project"))
|
raise ValidationError(_("Name duplicated for the project"))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
@ -268,7 +264,9 @@ class UserStoryExportSerializer(CustomAttributesValuesExportSerializerMixin, His
|
||||||
|
|
||||||
def custom_attributes_queryset(self, project):
|
def custom_attributes_queryset(self, project):
|
||||||
if project.id not in _custom_userstories_attributes_cache:
|
if project.id not in _custom_userstories_attributes_cache:
|
||||||
_custom_userstories_attributes_cache[project.id] = list(project.userstorycustomattributes.all().values('id', 'name'))
|
_custom_userstories_attributes_cache[project.id] = list(
|
||||||
|
project.userstorycustomattributes.all().values('id', 'name')
|
||||||
|
)
|
||||||
return _custom_userstories_attributes_cache[project.id]
|
return _custom_userstories_attributes_cache[project.id]
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,10 +312,10 @@ class WikiLinkExportSerializer(serializers.ModelSerializer):
|
||||||
exclude = ('id', 'project')
|
exclude = ('id', 'project')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TimelineExportSerializer(serializers.ModelSerializer):
|
class TimelineExportSerializer(serializers.ModelSerializer):
|
||||||
data = TimelineDataField()
|
data = TimelineDataField()
|
||||||
data_content_type = ContentTypeField()
|
data_content_type = ContentTypeField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = timeline_models.Timeline
|
model = timeline_models.Timeline
|
||||||
exclude = ('id', 'project', 'namespace', 'object_id', 'content_type')
|
exclude = ('id', 'project', 'namespace', 'object_id', 'content_type')
|
||||||
|
|
|
@ -22,7 +22,6 @@ from dateutil.relativedelta import relativedelta
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
@ -651,7 +650,7 @@ class MembershipViewSet(BlockedByProjectMixin, ModelCrudViewSet):
|
||||||
invitation_extra_text=invitation_extra_text,
|
invitation_extra_text=invitation_extra_text,
|
||||||
callback=self.post_save,
|
callback=self.post_save,
|
||||||
precall=self.pre_save)
|
precall=self.pre_save)
|
||||||
except ValidationError as err:
|
except exc.ValidationError as err:
|
||||||
return response.BadRequest(err.message_dict)
|
return response.BadRequest(err.message_dict)
|
||||||
|
|
||||||
members_serialized = self.admin_serializer_class(members, many=True)
|
members_serialized = self.admin_serializer_class(members, many=True)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from taiga.base.fields import JsonField
|
from taiga.base.fields import JsonField
|
||||||
from taiga.base.api.serializers import ValidationError
|
from taiga.base.exceptions import ValidationError
|
||||||
from taiga.base.api.validators import ModelValidator
|
from taiga.base.api.validators import ModelValidator
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.exceptions import ValidationError
|
||||||
from taiga.base.api import validators
|
from taiga.base.api import validators
|
||||||
from taiga.projects.validators import DuplicatedNameInProjectValidator
|
from taiga.projects.validators import DuplicatedNameInProjectValidator
|
||||||
from taiga.projects.notifications.validators import WatchersValidator
|
from taiga.projects.notifications.validators import WatchersValidator
|
||||||
|
@ -31,7 +31,7 @@ class MilestoneExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not models.Milestone.objects.filter(pk=value).exists():
|
if not models.Milestone.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no milestone with that id")
|
msg = _("There's no milestone with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
class WatchersValidator:
|
class WatchersValidator:
|
||||||
|
@ -45,6 +45,6 @@ class WatchersValidator:
|
||||||
existing_watcher_ids = project.get_watchers().values_list("id", flat=True)
|
existing_watcher_ids = project.get_watchers().values_list("id", flat=True)
|
||||||
result = set(users).difference(member_ids).difference(existing_watcher_ids)
|
result = set(users).difference(member_ids).difference(existing_watcher_ids)
|
||||||
if result:
|
if result:
|
||||||
raise serializers.ValidationError(_("Watchers contains invalid users"))
|
raise ValidationError(_("Watchers contains invalid users"))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.api import serializers
|
||||||
from taiga.base.api import validators
|
from taiga.base.api import validators
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
class ResolverValidator(validators.Validator):
|
class ResolverValidator(validators.Validator):
|
||||||
|
@ -32,10 +33,10 @@ class ResolverValidator(validators.Validator):
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
if "ref" in attrs:
|
if "ref" in attrs:
|
||||||
if "us" in attrs:
|
if "us" in attrs:
|
||||||
raise serializers.ValidationError("'us' param is incompatible with 'ref' in the same request")
|
raise ValidationError("'us' param is incompatible with 'ref' in the same request")
|
||||||
if "task" in attrs:
|
if "task" in attrs:
|
||||||
raise serializers.ValidationError("'task' param is incompatible with 'ref' in the same request")
|
raise ValidationError("'task' param is incompatible with 'ref' in the same request")
|
||||||
if "issue" in attrs:
|
if "issue" in attrs:
|
||||||
raise serializers.ValidationError("'issue' param is incompatible with 'ref' in the same request")
|
raise ValidationError("'issue' param is incompatible with 'ref' in the same request")
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
|
@ -16,11 +16,11 @@
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.forms import widgets
|
from django.forms import widgets
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.api import serializers
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ 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 taiga.base.api import validators
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
from taiga.base.fields import PgArrayField
|
from taiga.base.fields import PgArrayField
|
||||||
from taiga.projects.milestones.validators import MilestoneExistsValidator
|
from taiga.projects.milestones.validators import MilestoneExistsValidator
|
||||||
from taiga.projects.notifications.mixins import EditableWatchedResourceSerializer
|
from taiga.projects.notifications.mixins import EditableWatchedResourceSerializer
|
||||||
|
@ -34,7 +35,7 @@ class TaskExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not models.Task.objects.filter(pk=value).exists():
|
if not models.Task.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no task with that id")
|
msg = _("There's no task with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ 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 taiga.base.api import validators
|
||||||
from taiga.base.api.utils import get_object_or_404
|
from taiga.base.api.utils import get_object_or_404
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
from taiga.base.fields import PgArrayField
|
from taiga.base.fields import PgArrayField
|
||||||
from taiga.base.fields import PickledObjectField
|
from taiga.base.fields import PickledObjectField
|
||||||
from taiga.projects.milestones.validators import MilestoneExistsValidator
|
from taiga.projects.milestones.validators import MilestoneExistsValidator
|
||||||
|
@ -40,7 +41,7 @@ class UserStoryExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not models.UserStory.objects.filter(pk=value).exists():
|
if not models.UserStory.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no user story with that id")
|
msg = _("There's no user story with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,9 +106,9 @@ class UpdateMilestoneBulkValidator(ProjectExistsValidator, MilestoneExistsValida
|
||||||
project = get_object_or_404(Project, pk=data["project_id"])
|
project = get_object_or_404(Project, pk=data["project_id"])
|
||||||
|
|
||||||
if project.user_stories.filter(id__in=user_story_ids).count() != len(user_story_ids):
|
if project.user_stories.filter(id__in=user_story_ids).count() != len(user_story_ids):
|
||||||
raise serializers.ValidationError("all the user stories must be from the same project")
|
raise ValidationError("all the user stories must be from the same project")
|
||||||
|
|
||||||
if project.milestones.filter(id=data["milestone_id"]).count() != 1:
|
if project.milestones.filter(id=data["milestone_id"]).count() != 1:
|
||||||
raise serializers.ValidationError("the milestone isn't valid for the project")
|
raise ValidationError("the milestone isn't valid for the project")
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
|
@ -21,6 +21,7 @@ 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 taiga.base.api import validators
|
||||||
|
from taiga.base.exceptions import ValidationError
|
||||||
from taiga.base.fields import JsonField
|
from taiga.base.fields import JsonField
|
||||||
from taiga.base.fields import PgArrayField
|
from taiga.base.fields import PgArrayField
|
||||||
from taiga.users.validators import RoleExistsValidator
|
from taiga.users.validators import RoleExistsValidator
|
||||||
|
@ -49,7 +50,7 @@ class DuplicatedNameInProjectValidator:
|
||||||
qs = model.objects.filter(project=attrs["project"], name=attrs[source])
|
qs = model.objects.filter(project=attrs["project"], name=attrs[source])
|
||||||
|
|
||||||
if qs and qs.exists():
|
if qs and qs.exists():
|
||||||
raise serializers.ValidationError(_("Name duplicated for the project"))
|
raise ValidationError(_("Name duplicated for the project"))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
@ -59,7 +60,7 @@ class ProjectExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not models.Project.objects.filter(pk=value).exists():
|
if not models.Project.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no project with that id")
|
msg = _("There's no project with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,7 +69,7 @@ class UserStoryStatusExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not models.UserStoryStatus.objects.filter(pk=value).exists():
|
if not models.UserStoryStatus.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no user story status with that id")
|
msg = _("There's no user story status with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,7 +78,7 @@ class TaskStatusExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not models.TaskStatus.objects.filter(pk=value).exists():
|
if not models.TaskStatus.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no task status with that id")
|
msg = _("There's no task status with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,7 +153,7 @@ class MembershipValidator(validators.ModelValidator):
|
||||||
Q(project_id=project.id, email=email))
|
Q(project_id=project.id, email=email))
|
||||||
|
|
||||||
if qs.count() > 0:
|
if qs.count() > 0:
|
||||||
raise serializers.ValidationError(_("Email address is already taken"))
|
raise ValidationError(_("Email address is already taken"))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
@ -164,7 +165,7 @@ class MembershipValidator(validators.ModelValidator):
|
||||||
role = attrs[source]
|
role = attrs[source]
|
||||||
|
|
||||||
if project.roles.filter(id=role.id).count() == 0:
|
if project.roles.filter(id=role.id).count() == 0:
|
||||||
raise serializers.ValidationError(_("Invalid role for the project"))
|
raise ValidationError(_("Invalid role for the project"))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
@ -175,10 +176,10 @@ class MembershipValidator(validators.ModelValidator):
|
||||||
|
|
||||||
if (self.object and self.object.user):
|
if (self.object and self.object.user):
|
||||||
if self.object.user.id == project.owner_id and not attrs[source]:
|
if self.object.user.id == project.owner_id and not attrs[source]:
|
||||||
raise serializers.ValidationError(_("The project owner must be admin."))
|
raise ValidationError(_("The project owner must be admin."))
|
||||||
|
|
||||||
if not services.project_has_valid_admins(project, exclude_user=self.object.user):
|
if not services.project_has_valid_admins(project, exclude_user=self.object.user):
|
||||||
raise serializers.ValidationError(
|
raise ValidationError(
|
||||||
_("At least one user must be an active admin for this project.")
|
_("At least one user must be an active admin for this project.")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,6 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import validators
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.api import serializers
|
||||||
from taiga.base.fields import PgArrayField, Field, MethodField, I18NField
|
from taiga.base.fields import PgArrayField, Field, MethodField, I18NField
|
||||||
|
@ -27,14 +24,11 @@ from taiga.base.fields import PgArrayField, Field, MethodField, I18NField
|
||||||
from taiga.base.utils.thumbnails import get_thumbnail_url
|
from taiga.base.utils.thumbnails import get_thumbnail_url
|
||||||
|
|
||||||
from taiga.projects.models import Project
|
from taiga.projects.models import Project
|
||||||
from .models import User, Role
|
|
||||||
from .services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url
|
from .services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url
|
||||||
from .gravatar import get_gravatar_url
|
from .gravatar import get_gravatar_url
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
|
|
||||||
######################################################
|
######################################################
|
||||||
# User
|
# User
|
||||||
|
|
|
@ -17,12 +17,12 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from django.core import validators as core_validators
|
from django.core import validators as core_validators
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.api import serializers
|
||||||
from taiga.base.api import validators
|
from taiga.base.api import validators
|
||||||
from taiga.base.fields import PgArrayField, Field
|
from taiga.base.exceptions import ValidationError
|
||||||
|
from taiga.base.fields import PgArrayField
|
||||||
|
|
||||||
from .models import User, Role
|
from .models import User, Role
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class RoleExistsValidator:
|
||||||
value = attrs[source]
|
value = attrs[source]
|
||||||
if not Role.objects.filter(pk=value).exists():
|
if not Role.objects.filter(pk=value).exists():
|
||||||
msg = _("There's no role with that id")
|
msg = _("There's no role with that id")
|
||||||
raise serializers.ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,13 +55,13 @@ class UserValidator(validators.ModelValidator):
|
||||||
try:
|
try:
|
||||||
validator(value)
|
validator(value)
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
raise validators.ValidationError(_("Required. 255 characters or fewer. Letters, "
|
raise ValidationError(_("Required. 255 characters or fewer. Letters, "
|
||||||
"numbers and /./-/_ characters'"))
|
"numbers and /./-/_ characters'"))
|
||||||
|
|
||||||
if (self.object and
|
if (self.object and
|
||||||
self.object.username != value and
|
self.object.username != value and
|
||||||
User.objects.filter(username=value).exists()):
|
User.objects.filter(username=value).exists()):
|
||||||
raise validators.ValidationError(_("Invalid username. Try with a different one."))
|
raise ValidationError(_("Invalid username. Try with a different one."))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from taiga.base.api import ModelCrudViewSet
|
from taiga.base.api import ModelCrudViewSet
|
||||||
from taiga.base.api.serializers import ValidationError
|
|
||||||
from taiga.base import exceptions as exc
|
from taiga.base import exceptions as exc
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
|
Loading…
Reference in New Issue