Exemple #1
0
class MilestoneExportSerializer(WatcheableObjectModelSerializer):
    owner = UserRelatedField(required=False)
    modified_date = serializers.DateTimeField(required=False)
    estimated_start = serializers.DateField(required=False)
    estimated_finish = serializers.DateField(required=False)

    def __init__(self, *args, **kwargs):
        project = kwargs.pop('project', None)
        super(MilestoneExportSerializer, self).__init__(*args, **kwargs)
        if project:
            self.project = project

    def validate_name(self, attrs, source):
        """
        Check the milestone name is not duplicated in the project
        """
        name = attrs[source]
        qs = self.project.milestones.filter(name=name)
        if qs.exists():
            raise serializers.ValidationError(
                _("Name duplicated for the project"))

        return attrs

    class Meta:
        model = milestones_models.Milestone
        exclude = ('id', 'project')
Exemple #2
0
class AttachmentExportValidator(validators.ModelValidator):
    owner = UserRelatedField(required=False)
    attached_file = FileField()
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = attachments_models.Attachment
        exclude = ("id", "content_type", "object_id", "project")
Exemple #3
0
class TaskExportValidator(WatcheableObjectModelValidatorMixin):
    owner = UserRelatedField(required=False)
    status = ProjectRelatedField(slug_field="name")
    user_story = ProjectRelatedField(slug_field="ref", required=False)
    milestone = ProjectRelatedField(slug_field="name", required=False)
    assigned_to = UserRelatedField(required=False)
    modified_date = serializers.DateTimeField(required=False)
    due_date = serializers.DateTimeField(required=False)

    class Meta:
        model = tasks_models.Task
        exclude = ('id', 'project')

    def custom_attributes_queryset(self, project):
        if project.id not in _custom_tasks_attributes_cache:
            _custom_tasks_attributes_cache[project.id] = list(project.taskcustomattributes.all().values('id', 'name'))
        return _custom_tasks_attributes_cache[project.id]
Exemple #4
0
class WikiPageExportValidator(WatcheableObjectModelValidatorMixin):
    owner = UserRelatedField(required=False)
    last_modifier = UserRelatedField(required=False)
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = wiki_models.WikiPage
        exclude = ('id', 'project')
Exemple #5
0
class AttachmentExportSerializer(serializers.ModelSerializer):
    owner = UserRelatedField(required=False)
    attached_file = FileField()
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = attachments_models.Attachment
        exclude = ('id', 'content_type', 'object_id', 'project')
Exemple #6
0
class WikiPageExportSerializer(HistoryExportSerializerMixin, AttachmentExportSerializerMixin,
                               WatcheableObjectModelSerializer):
    owner = UserRelatedField(required=False)
    last_modifier = UserRelatedField(required=False)
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = wiki_models.WikiPage
        exclude = ('id', 'project')
Exemple #7
0
class IssueExportValidator(WatcheableObjectModelValidatorMixin):
    owner = UserRelatedField(required=False)
    status = ProjectRelatedField(slug_field="name")
    assigned_to = UserRelatedField(required=False)
    priority = ProjectRelatedField(slug_field="name")
    severity = ProjectRelatedField(slug_field="name")
    type = ProjectRelatedField(slug_field="name")
    milestone = ProjectRelatedField(slug_field="name", required=False)
    modified_date = serializers.DateTimeField(required=False)
    due_date = serializers.DateTimeField(required=False)

    class Meta:
        model = issues_models.Issue
        exclude = ("id", "project")

    def custom_attributes_queryset(self, project):
        if project.id not in _custom_issues_attributes_cache:
            _custom_issues_attributes_cache[project.id] = list(
                project.issuecustomattributes.all().values("id", "name"))
        return _custom_issues_attributes_cache[project.id]
Exemple #8
0
class UserStoryExportValidator(WatcheableObjectModelValidatorMixin):
    role_points = RolePointsExportValidator(many=True, required=False)
    owner = UserRelatedField(required=False)
    assigned_to = UserRelatedField(required=False)
    assigned_users = UserRelatedField(many=True, required=False)
    status = ProjectRelatedField(slug_field="name")
    milestone = ProjectRelatedField(slug_field="name", required=False)
    modified_date = serializers.DateTimeField(required=False)
    generated_from_issue = ProjectRelatedField(slug_field="ref",
                                               required=False)
    due_date = serializers.DateTimeField(required=False)

    class Meta:
        model = userstories_models.UserStory
        exclude = ('id', 'project', 'points', 'tasks')

    def custom_attributes_queryset(self, project):
        if project.id not in _custom_userstories_attributes_cache:
            _custom_userstories_attributes_cache[project.id] = list(
                project.userstorycustomattributes.all().values('id', 'name'))
        return _custom_userstories_attributes_cache[project.id]
Exemple #9
0
class HistoryExportSerializer(serializers.ModelSerializer):
    user = HistoryUserField()
    diff = HistoryDiffField(required=False)
    snapshot = JsonField(required=False)
    values = HistoryValuesField(required=False)
    comment = CommentField(required=False)
    delete_comment_date = serializers.DateTimeField(required=False)
    delete_comment_user = HistoryUserField(required=False)

    class Meta:
        model = history_models.HistoryEntry
        exclude = ("id", "comment_html", "key")
Exemple #10
0
class ProjectExportValidator(WatcheableObjectModelValidatorMixin):
    logo = FileField(required=False)
    anon_permissions = PgArrayField(required=False)
    public_permissions = PgArrayField(required=False)
    modified_date = serializers.DateTimeField(required=False)
    roles = RoleExportValidator(many=True, required=False)
    owner = UserRelatedField(required=False)
    memberships = MembershipExportValidator(many=True, required=False)
    points = PointsExportValidator(many=True, required=False)
    us_statuses = UserStoryStatusExportValidator(many=True, required=False)
    task_statuses = TaskStatusExportValidator(many=True, required=False)
    issue_types = IssueTypeExportValidator(many=True, required=False)
    issue_statuses = IssueStatusExportValidator(many=True, required=False)
    priorities = PriorityExportValidator(many=True, required=False)
    severities = SeverityExportValidator(many=True, required=False)
    swimlanes = SwimlaneExportValidator(many=True, required=False)
    tags_colors = JSONField(required=False)
    creation_template = serializers.SlugRelatedField(slug_field="slug",
                                                     required=False)
    default_points = serializers.SlugRelatedField(slug_field="name",
                                                  required=False)
    default_us_status = serializers.SlugRelatedField(slug_field="name",
                                                     required=False)
    default_task_status = serializers.SlugRelatedField(slug_field="name",
                                                       required=False)
    default_priority = serializers.SlugRelatedField(slug_field="name",
                                                    required=False)
    default_severity = serializers.SlugRelatedField(slug_field="name",
                                                    required=False)
    default_issue_status = serializers.SlugRelatedField(slug_field="name",
                                                        required=False)
    default_issue_type = serializers.SlugRelatedField(slug_field="name",
                                                      required=False)
    default_swimlane = serializers.SlugRelatedField(slug_field="name",
                                                    required=False)
    userstorycustomattributes = UserStoryCustomAttributeExportValidator(
        many=True, required=False)
    taskcustomattributes = TaskCustomAttributeExportValidator(many=True,
                                                              required=False)
    issuecustomattributes = IssueCustomAttributeExportValidator(many=True,
                                                                required=False)
    user_stories = UserStoryExportValidator(many=True, required=False)
    tasks = TaskExportValidator(many=True, required=False)
    milestones = MilestoneExportValidator(many=True, required=False)
    issues = IssueExportValidator(many=True, required=False)
    wiki_links = WikiLinkExportValidator(many=True, required=False)
    wiki_pages = WikiPageExportValidator(many=True, required=False)

    class Meta:
        model = projects_models.Project
        exclude = ('id', 'members')
Exemple #11
0
class ProjectExportSerializer(WatcheableObjectModelSerializer):
    logo = FileField(required=False)
    anon_permissions = PgArrayField(required=False)
    public_permissions = PgArrayField(required=False)
    modified_date = serializers.DateTimeField(required=False)
    roles = RoleExportSerializer(many=True, required=False)
    owner = UserRelatedField(required=False)
    memberships = MembershipExportSerializer(many=True, required=False)
    points = PointsExportSerializer(many=True, required=False)
    us_statuses = UserStoryStatusExportSerializer(many=True, required=False)
    task_statuses = TaskStatusExportSerializer(many=True, required=False)
    issue_types = IssueTypeExportSerializer(many=True, required=False)
    issue_statuses = IssueStatusExportSerializer(many=True, required=False)
    priorities = PriorityExportSerializer(many=True, required=False)
    severities = SeverityExportSerializer(many=True, required=False)
    tags_colors = JsonField(required=False)
    default_points = serializers.SlugRelatedField(slug_field="name",
                                                  required=False)
    default_us_status = serializers.SlugRelatedField(slug_field="name",
                                                     required=False)
    default_task_status = serializers.SlugRelatedField(slug_field="name",
                                                       required=False)
    default_priority = serializers.SlugRelatedField(slug_field="name",
                                                    required=False)
    default_severity = serializers.SlugRelatedField(slug_field="name",
                                                    required=False)
    default_issue_status = serializers.SlugRelatedField(slug_field="name",
                                                        required=False)
    default_issue_type = serializers.SlugRelatedField(slug_field="name",
                                                      required=False)
    userstorycustomattributes = UserStoryCustomAttributeExportSerializer(
        many=True, required=False)
    taskcustomattributes = TaskCustomAttributeExportSerializer(many=True,
                                                               required=False)
    issuecustomattributes = IssueCustomAttributeExportSerializer(
        many=True, required=False)
    user_stories = UserStoryExportSerializer(many=True, required=False)
    tasks = TaskExportSerializer(many=True, required=False)
    milestones = MilestoneExportSerializer(many=True, required=False)
    issues = IssueExportSerializer(many=True, required=False)
    wiki_links = WikiLinkExportSerializer(many=True, required=False)
    wiki_pages = WikiPageExportSerializer(many=True, required=False)
    timeline = serializers.SerializerMethodField("get_timeline")

    class Meta:
        model = projects_models.Project
        exclude = ('id', 'creation_template', 'members')

    def get_timeline(self, obj):
        timeline_qs = timeline_service.get_project_timeline(obj)
        return TimelineExportSerializer(timeline_qs, many=True).data
Exemple #12
0
class TaskExportSerializer(CustomAttributesValuesExportSerializerMixin, HistoryExportSerializerMixin,
                           AttachmentExportSerializerMixin, WatcheableObjectModelSerializer):
    owner = UserRelatedField(required=False)
    status = ProjectRelatedField(slug_field="name")
    user_story = ProjectRelatedField(slug_field="ref", required=False)
    milestone = ProjectRelatedField(slug_field="name", required=False)
    assigned_to = UserRelatedField(required=False)
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = tasks_models.Task
        exclude = ('id', 'project')

    def custom_attributes_queryset(self, project):
        return project.taskcustomattributes.all()
Exemple #13
0
class UserStoryExportSerializer(CustomAttributesValuesExportSerializerMixin, HistoryExportSerializerMixin,
                                AttachmentExportSerializerMixin, WatcheableObjectModelSerializer):
    role_points = RolePointsExportSerializer(many=True, required=False)
    owner = UserRelatedField(required=False)
    assigned_to = UserRelatedField(required=False)
    status = ProjectRelatedField(slug_field="name")
    milestone = ProjectRelatedField(slug_field="name", required=False)
    modified_date = serializers.DateTimeField(required=False)
    generated_from_issue = ProjectRelatedField(slug_field="ref", required=False)

    class Meta:
        model = userstories_models.UserStory
        exclude = ('id', 'project', 'points', 'tasks')

    def custom_attributes_queryset(self, project):
        return project.userstorycustomattributes.all()
Exemple #14
0
class EpicExportValidator(WatcheableObjectModelValidatorMixin):
    owner = UserRelatedField(required=False)
    assigned_to = UserRelatedField(required=False)
    status = ProjectRelatedField(slug_field="name")
    modified_date = serializers.DateTimeField(required=False)
    user_stories = EpicRelatedUserStoryExportValidator(many=True,
                                                       required=False)

    class Meta:
        model = epics_models.Epic
        exclude = ('id', 'project')

    def custom_attributes_queryset(self, project):
        if project.id not in _custom_epics_attributes_cache:
            _custom_epics_attributes_cache[project.id] = list(
                project.epiccustomattributes.all().values('id', 'name'))
        return _custom_epics_attributes_cache[project.id]
Exemple #15
0
class IssueExportSerializer(CustomAttributesValuesExportSerializerMixin, HistoryExportSerializerMixin,
                            AttachmentExportSerializerMixin, WatcheableObjectModelSerializer):
    owner = UserRelatedField(required=False)
    status = ProjectRelatedField(slug_field="name")
    assigned_to = UserRelatedField(required=False)
    priority = ProjectRelatedField(slug_field="name")
    severity = ProjectRelatedField(slug_field="name")
    type = ProjectRelatedField(slug_field="name")
    milestone = ProjectRelatedField(slug_field="name", required=False)
    votes = serializers.SerializerMethodField("get_votes")
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = issues_models.Issue
        exclude = ('id', 'project')

    def get_votes(self, obj):
        return [x.email for x in votes_service.get_voters(obj)]

    def custom_attributes_queryset(self, project):
        return project.issuecustomattributes.all()
Exemple #16
0
class HistoryExportValidator(validators.ModelValidator):
    user = HistoryUserField()
    diff = HistoryDiffField(required=False)
    snapshot = HistorySnapshotField(required=False)
    values = HistoryValuesField(required=False)
    comment = CommentField(required=False)
    delete_comment_date = serializers.DateTimeField(required=False)
    delete_comment_user = HistoryUserField(required=False)

    class Meta:
        model = history_models.HistoryEntry
        exclude = ("id", "comment_html", "key", "project")

    def restore_object(self, attrs, instance=None):
        snapshot = attrs["snapshot"]
        statuses = self.context.get("statuses", {})
        if "status" in snapshot:
            status_id = statuses.get(snapshot["status"], None)
            attrs["snapshot"]["status"] = status_id

        instance = super(HistoryExportValidator, self).restore_object(attrs, instance)
        return instance
Exemple #17
0
class IssueCustomAttributeExportSerializer(serializers.ModelSerializer):
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = custom_attributes_models.IssueCustomAttribute
        exclude = ('id', 'project')
Exemple #18
0
class IssueCustomAttributeExportValidator(validators.ModelValidator):
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = custom_attributes_models.IssueCustomAttribute
        exclude = ("id", "project")
Exemple #19
0
class HighLightedContentSerializer(serializers.Serializer):
    type = serializers.CharField()
    id = serializers.IntegerField()
    ref = serializers.IntegerField()
    slug = serializers.CharField()
    name = serializers.CharField()
    subject = serializers.CharField()
    description = serializers.SerializerMethodField("get_description")
    assigned_to = serializers.IntegerField()
    status = serializers.CharField()
    status_color = serializers.CharField()
    tags_colors = serializers.SerializerMethodField("get_tags_color")
    created_date = serializers.DateTimeField()
    is_private = serializers.SerializerMethodField("get_is_private")
    logo_small_url = serializers.SerializerMethodField("get_logo_small_url")

    project = serializers.SerializerMethodField("get_project")
    project_name = serializers.SerializerMethodField("get_project_name")
    project_slug = serializers.SerializerMethodField("get_project_slug")
    project_is_private = serializers.SerializerMethodField(
        "get_project_is_private")
    project_blocked_code = serializers.CharField()

    assigned_to_username = serializers.CharField()
    assigned_to_full_name = serializers.CharField()
    assigned_to_photo = serializers.SerializerMethodField("get_photo")

    is_watcher = serializers.SerializerMethodField("get_is_watcher")
    total_watchers = serializers.IntegerField()

    def __init__(self, *args, **kwargs):
        # Don't pass the extra ids args up to the superclass
        self.user_watching = kwargs.pop("user_watching", {})

        # Instantiate the superclass normally
        super().__init__(*args, **kwargs)

    def _none_if_project(self, obj, property):
        type = obj.get("type", "")
        if type == "project":
            return None

        return obj.get(property)

    def _none_if_not_project(self, obj, property):
        type = obj.get("type", "")
        if type != "project":
            return None

        return obj.get(property)

    def get_project(self, obj):
        return self._none_if_project(obj, "project")

    def get_is_private(self, obj):
        return self._none_if_not_project(obj, "project_is_private")

    def get_project_name(self, obj):
        return self._none_if_project(obj, "project_name")

    def get_description(self, obj):
        return self._none_if_not_project(obj, "description")

    def get_project_slug(self, obj):
        return self._none_if_project(obj, "project_slug")

    def get_project_is_private(self, obj):
        return self._none_if_project(obj, "project_is_private")

    def get_logo_small_url(self, obj):
        logo = self._none_if_not_project(obj, "logo")
        if logo:
            return get_thumbnail_url(logo, settings.THN_LOGO_SMALL)
        return None

    def get_photo(self, obj):
        type = obj.get("type", "")
        if type == "project":
            return None

        UserData = namedtuple("UserData", ["photo", "email"])
        user_data = UserData(photo=obj["assigned_to_photo"],
                             email=obj.get("assigned_to_email") or "")
        return get_photo_or_gravatar_url(user_data)

    def get_tags_color(self, obj):
        tags = obj.get("tags", [])
        tags = tags if tags is not None else []
        tags_colors = obj.get("tags_colors", [])
        tags_colors = tags_colors if tags_colors is not None else []
        return [{
            "name": tc[0],
            "color": tc[1]
        } for tc in tags_colors if tc[0] in tags]

    def get_is_watcher(self, obj):
        return obj["id"] in self.user_watching.get(obj["type"], [])
Exemple #20
0
class TaskCustomAttributeExportValidator(validators.ModelValidator):
    modified_date = serializers.DateTimeField(required=False)

    class Meta:
        model = custom_attributes_models.TaskCustomAttribute
        exclude = ('id', 'project')