コード例 #1
0
class ResolverValidator(validators.Validator):
    project = serializers.CharField(max_length=512, required=True)
    milestone = serializers.CharField(max_length=512, required=False)
    epic = serializers.IntegerField(required=False)
    us = serializers.IntegerField(required=False)
    task = serializers.IntegerField(required=False)
    issue = serializers.IntegerField(required=False)
    wikipage = serializers.CharField(max_length=512, required=False)
    ref = serializers.CharField(max_length=512, required=False)

    def validate(self, attrs):
        if "ref" in attrs:
            if "epic" in attrs:
                raise ValidationError(
                    "'epic' param is incompatible with 'ref' in the same request"
                )
            if "us" in attrs:
                raise ValidationError(
                    "'us' param is incompatible with 'ref' in the same request"
                )
            if "task" in attrs:
                raise ValidationError(
                    "'task' param is incompatible with 'ref' in the same request"
                )
            if "issue" in attrs:
                raise ValidationError(
                    "'issue' param is incompatible with 'ref' in the same request"
                )
            if "wikipage" in attrs:
                raise ValidationError(
                    "'wikipage' param is incompatible with 'ref' in the same request"
                )

        return attrs
コード例 #2
0
class TasksBulkValidator(ProjectExistsValidator, validators.Validator):
    project_id = serializers.IntegerField()
    milestone_id = serializers.IntegerField()
    status_id = serializers.IntegerField(required=False)
    us_id = serializers.IntegerField(required=False)
    bulk_tasks = serializers.CharField()

    def validate_milestone_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"], "id": attrs[source]}

        if not Milestone.objects.filter(**filters).exists():
            raise ValidationError(_("Invalid milestone id."))

        return attrs

    def validate_status_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"], "id": attrs[source]}

        if not TaskStatus.objects.filter(**filters).exists():
            raise ValidationError(_("Invalid task status id."))

        return attrs

    def validate_us_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"]}

        if "milestone_id" in attrs:
            filters["milestone__id"] = attrs["milestone_id"]

        filters["id"] = attrs["us_id"]

        if not UserStory.objects.filter(**filters).exists():
            raise ValidationError(_("Invalid user story id."))

        return attrs
コード例 #3
0
class UpdateMilestoneBulkValidator(ProjectExistsValidator,
                                   validators.Validator):
    project_id = serializers.IntegerField()
    milestone_id = serializers.IntegerField()
    bulk_tasks = _TaskMilestoneBulkValidator(many=True)

    def validate_milestone_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"], "id": attrs[source]}
        if not Milestone.objects.filter(**filters).exists():
            raise ValidationError(
                _("The milestone isn't valid for the project"))
        return attrs

    def validate_bulk_tasks(self, attrs, source):
        filters = {
            "project__id": attrs["project_id"],
            "id__in": [task["task_id"] for task in attrs[source]]
        }

        if models.Task.objects.filter(**filters).count() != len(
                filters["id__in"]):
            raise ValidationError(
                _("All the tasks must be from the same project"))

        return attrs
コード例 #4
0
class EpicRelatedUserStoryExportValidator(validators.ModelValidator):
    user_story = ProjectRelatedField(slug_field="ref")
    order = serializers.IntegerField()

    class Meta:
        model = epics_models.RelatedUserStory
        exclude = ('id', 'epic')
コード例 #5
0
class UserStoriesBulkValidator(ProjectExistsValidator, validators.Validator):
    project_id = serializers.IntegerField()
    status_id = serializers.IntegerField(required=False)
    bulk_stories = serializers.CharField()

    def validate_status_id(self, attrs, source):
        filters = {
            "project__id": attrs["project_id"],
            "id": attrs[source]
        }

        if not UserStoryStatus.objects.filter(**filters).exists():
            raise ValidationError(_("Invalid user story status id. The status must belong to "
                                    "the same project."))

        return attrs
コード例 #6
0
class UpdateMilestoneBulkValidator(MilestoneExistsValidator,
                                   ProjectExistsValidator,
                                   validators.Validator):
    project_id = serializers.IntegerField()
    milestone_id = serializers.IntegerField()
    bulk_stories = _UserStoryMilestoneBulkValidator(many=True)

    def validate_bulk_stories(self, attrs, source):
        filters = {
            "project__id": attrs["project_id"],
            "id__in": [us["us_id"] for us in attrs[source]]
        }

        if UserStory.objects.filter(**filters).count() != len(
                filters["id__in"]):
            raise ValidationError(
                _("All the user stories must be from the same project"))

        return attrs
コード例 #7
0
class UpdateUserStoriesOrderBulkValidator(ProjectExistsValidator, validators.Validator):
    project_id = serializers.IntegerField()
    status_id = serializers.IntegerField(required=False)
    milestone_id = serializers.IntegerField(required=False)
    bulk_stories = _UserStoryOrderBulkValidator(many=True)

    def validate_status_id(self, attrs, source):
        filters = {
            "project__id": attrs["project_id"],
            "id": attrs[source]
        }

        if not UserStoryStatus.objects.filter(**filters).exists():
            raise ValidationError(_("Invalid user story status id. The status must belong "
                                    "to the same project."))

        return attrs

    def validate_milestone_id(self, attrs, source):
        filters = {
            "project__id": attrs["project_id"],
            "id": attrs[source]
        }

        if not Milestone.objects.filter(**filters).exists():
            raise ValidationError(_("Invalid milestone id. The milistone must belong to the "
                                    "same project."))

        return attrs

    def validate_bulk_stories(self, attrs, source):
        filters = {"project__id": attrs["project_id"]}
        if "milestone_id" in attrs:
            filters["milestone__id"] = attrs["milestone_id"]

        filters["id__in"] = [us["us_id"] for us in attrs[source]]

        if models.UserStory.objects.filter(**filters).count() != len(filters["id__in"]):
            raise ValidationError(_("Invalid user story ids. All stories must belong to the same project "
                                    "and, if it exists, to the same status and milestone."))

        return attrs
コード例 #8
0
class MembersBulkValidator(ProjectExistsValidator, validators.Validator):
    project_id = serializers.IntegerField()
    bulk_memberships = _MemberBulkValidator(many=True)
    invitation_extra_text = serializers.CharField(required=False,
                                                  max_length=255)

    def validate_bulk_memberships(self, attrs, source):
        project_id = attrs["project_id"]
        role_ids = [r["role_id"] for r in attrs["bulk_memberships"]]

        if Role.objects.filter(project_id=project_id,
                               id__in=role_ids).count() != len(set(role_ids)):
            raise ValidationError(
                _("Invalid role ids. All roles must belong to the same project."
                  ))

        return attrs
コード例 #9
0
class _MemberBulkValidator(validators.Validator):
    username = serializers.CharField()
    role_id = serializers.IntegerField()

    def validate_username(self, attrs, source):
        username = attrs.get(source)
        try:
            validate_user_email_allowed_domains(username)
        except InvalidEmailValidationError:
            # If the validation comes from a request let's check the user is a valid contact
            request = self.context.get("request", None)
            if request is not None and request.user.is_authenticated():
                valid_usernames = set(
                    request.user.contacts_visible_by_user(
                        request.user).values_list("username", flat=True))
                if username not in valid_usernames:
                    raise ValidationError(
                        _("The user must be a valid contact"))

        return attrs
コード例 #10
0
class UpdateProjectOrderBulkValidator(ProjectExistsValidator,
                                      validators.Validator):
    project_id = serializers.IntegerField()
    order = serializers.IntegerField()
コード例 #11
0
class DueDatesCreationValidator(ProjectExistsValidator, validators.Validator):
    project_id = serializers.IntegerField()
コード例 #12
0
class _UserStoryMilestoneBulkValidator(validators.Validator):
    us_id = serializers.IntegerField()
    order = serializers.IntegerField()
コード例 #13
0
class CreateRelatedUserStoriesBulkValidator(ProjectExistsValidator,
                                            EpicExistsValidator,
                                            validators.Validator):
    project_id = serializers.IntegerField()
    bulk_userstories = serializers.CharField()
コード例 #14
0
class EpicsBulkValidator(ProjectExistsValidator, EpicExistsValidator,
                         validators.Validator):
    project_id = serializers.IntegerField()
    status_id = serializers.IntegerField(required=False)
    bulk_epics = serializers.CharField()
コード例 #15
0
class UpdateTasksOrderBulkValidator(ProjectExistsValidator,
                                    validators.Validator):
    project_id = serializers.IntegerField()
    status_id = serializers.IntegerField(required=False)
    us_id = serializers.IntegerField(required=False)
    milestone_id = serializers.IntegerField(required=False)
    bulk_tasks = _TaskOrderBulkValidator(many=True)

    def validate_status_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"]}
        filters["id"] = attrs[source]

        if not TaskStatus.objects.filter(**filters).exists():
            raise ValidationError(
                _("Invalid task status id. The status must belong to "
                  "the same project."))

        return attrs

    def validate_us_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"]}

        if "milestone_id" in attrs:
            filters["milestone__id"] = attrs["milestone_id"]

        filters["id"] = attrs[source]

        if not UserStory.objects.filter(**filters).exists():
            raise ValidationError(
                _("Invalid user story id. The user story must belong to "
                  "the same project."))

        return attrs

    def validate_milestone_id(self, attrs, source):
        filters = {"project__id": attrs["project_id"], "id": attrs[source]}

        if not Milestone.objects.filter(**filters).exists():
            raise ValidationError(
                _("Invalid milestone id. The milestone must belong to "
                  "the same project."))

        return attrs

    def validate_bulk_tasks(self, attrs, source):
        filters = {"project__id": attrs["project_id"]}
        if "status_id" in attrs:
            filters["status__id"] = attrs["status_id"]
        if "us_id" in attrs:
            filters["user_story__id"] = attrs["us_id"]
        if "milestone_id" in attrs:
            filters["milestone__id"] = attrs["milestone_id"]

        filters["id__in"] = [t["task_id"] for t in attrs[source]]

        if models.Task.objects.filter(**filters).count() != len(
                filters["id__in"]):
            raise ValidationError(
                _("Invalid task ids. All tasks must belong to the same project and, "
                  "if it exists, to the same status, user story and/or milestone."
                  ))

        return attrs
コード例 #16
0
class _TaskOrderBulkValidator(validators.Validator):
    task_id = serializers.IntegerField()
    order = serializers.IntegerField()