Exemple #1
0
class ProjectSerializer(FanResourceSerializerMixin,
                        WatchedResourceModelSerializer,
                        serializers.ModelSerializer):
    tags = TagsField(default=[], required=False)
    anon_permissions = PgArrayField(required=False)
    public_permissions = PgArrayField(required=False)
    my_permissions = serializers.SerializerMethodField("get_my_permissions")
    i_am_owner = serializers.SerializerMethodField("get_i_am_owner")
    tags_colors = TagsColorsField(required=False)
    total_closed_milestones = serializers.SerializerMethodField(
        "get_total_closed_milestones")
    notify_level = serializers.SerializerMethodField("get_notify_level")

    class Meta:
        model = models.Project
        read_only_fields = ("created_date", "modified_date", "owner", "slug")
        exclude = ("last_us_ref", "last_task_ref", "last_issue_ref",
                   "issues_csv_uuid", "tasks_csv_uuid", "userstories_csv_uuid")

    def get_my_permissions(self, obj):
        if "request" in self.context:
            return get_user_project_permissions(self.context["request"].user,
                                                obj)
        return []

    def get_i_am_owner(self, obj):
        if "request" in self.context:
            return is_project_owner(self.context["request"].user, obj)
        return False

    def get_total_closed_milestones(self, obj):
        return obj.milestones.filter(closed=True).count()

    def get_notify_level(self, obj):
        return getattr(obj, "notify_level", None)
Exemple #2
0
class ProjectSerializer(serializers.ModelSerializer):
    tags = PgArrayField(required=False)
    anon_permissions = PgArrayField(required=False)
    public_permissions = PgArrayField(required=False)
    stars = serializers.SerializerMethodField("get_stars_number")
    my_permissions = serializers.SerializerMethodField("get_my_permissions")
    i_am_owner = serializers.SerializerMethodField("get_i_am_owner")
    tags_colors = TagsColorsField(required=False)
    users = serializers.SerializerMethodField("get_users")
    total_closed_milestones = serializers.SerializerMethodField(
        "get_total_closed_milestones")

    class Meta:
        model = models.Project
        read_only_fields = ("created_date", "modified_date", "owner")
        exclude = ("last_us_ref", "last_task_ref", "last_issue_ref",
                   "issues_csv_uuid", "tasks_csv_uuid", "userstories_csv_uuid")

    def get_stars_number(self, obj):
        # The "stars_count" attribute is attached in the get_queryset of the viewset.
        return getattr(obj, "stars_count", 0)

    def get_my_permissions(self, obj):
        if "request" in self.context:
            return get_user_project_permissions(self.context["request"].user,
                                                obj)
        return []

    def get_i_am_owner(self, obj):
        if "request" in self.context:
            return is_project_owner(self.context["request"].user, obj)
        return False

    def get_users(self, obj):
        return UserSerializer(obj.members.all(), many=True).data

    def get_total_closed_milestones(self, obj):
        return obj.milestones.filter(closed=True).count()

    def validate_total_milestones(self, attrs, source):
        """
        Check that total_milestones is not null, it's an optional parameter but
        not nullable in the model.
        """
        value = attrs[source]
        if value is None:
            raise serializers.ValidationError(
                _("Total milestones must be major or equal to zero"))
        return attrs
Exemple #3
0
class ProjectSerializer(WatchersValidator, LikedResourceSerializerMixin, WatchedResourceModelSerializer, serializers.ModelSerializer):
    tags = TagsField(default=[], required=False)
    anon_permissions = PgArrayField(required=False)
    public_permissions = PgArrayField(required=False)
    my_permissions = serializers.SerializerMethodField("get_my_permissions")
    i_am_owner = serializers.SerializerMethodField("get_i_am_owner")
    tags_colors = TagsColorsField(required=False)
    total_closed_milestones = serializers.SerializerMethodField("get_total_closed_milestones")
    notify_level =  serializers.SerializerMethodField("get_notify_level")

    class Meta:
        model = models.Project
        read_only_fields = ("created_date", "modified_date", "owner", "slug")
        exclude = ("last_us_ref", "last_task_ref", "last_issue_ref",
                   "issues_csv_uuid", "tasks_csv_uuid", "userstories_csv_uuid")

    def get_my_permissions(self, obj):
        if "request" in self.context:
            return get_user_project_permissions(self.context["request"].user, obj)
        return []

    def get_i_am_owner(self, obj):
        if "request" in self.context:
            return is_project_owner(self.context["request"].user, obj)
        return False

    def get_total_closed_milestones(self, obj):
        return obj.milestones.filter(closed=True).count()

    def get_notify_level(self, obj):
        return getattr(obj, "notify_level", None)

    def validate_total_milestones(self, attrs, source):
        """
        Check that total_milestones is not null, it's an optional parameter but
        not nullable in the model.
        """
        value = attrs[source]
        if value is None:
            raise serializers.ValidationError(_("Total milestones must be major or equal to zero"))
        return attrs
Exemple #4
0
class ProjectSerializer(FanResourceSerializerMixin, WatchedResourceModelSerializer,
                        serializers.ModelSerializer):
    anon_permissions = PgArrayField(required=False)
    public_permissions = PgArrayField(required=False)
    my_permissions = serializers.SerializerMethodField("get_my_permissions")

    owner = UserBasicInfoSerializer(read_only=True)
    i_am_owner = serializers.SerializerMethodField("get_i_am_owner")
    i_am_admin = serializers.SerializerMethodField("get_i_am_admin")
    i_am_member = serializers.SerializerMethodField("get_i_am_member")

    tags = TagsField(default=[], required=False)
    tags_colors = TagsColorsField(required=False)

    notify_level = serializers.SerializerMethodField("get_notify_level")
    total_closed_milestones = serializers.SerializerMethodField("get_total_closed_milestones")
    total_watchers = serializers.SerializerMethodField("get_total_watchers")

    logo_small_url = serializers.SerializerMethodField("get_logo_small_url")
    logo_big_url = serializers.SerializerMethodField("get_logo_big_url")

    class Meta:
        model = models.Project
        read_only_fields = ("created_date", "modified_date", "slug", "blocked_code")
        exclude = ("logo", "last_us_ref", "last_task_ref", "last_issue_ref",
                   "issues_csv_uuid", "tasks_csv_uuid", "userstories_csv_uuid",
                   "transfer_token")

    def get_my_permissions(self, obj):
        if "request" in self.context:
            return get_user_project_permissions(self.context["request"].user, obj)
        return []

    def get_i_am_owner(self, obj):
        if "request" in self.context:
            return is_project_owner(self.context["request"].user, obj)
        return False

    def get_i_am_admin(self, obj):
        if "request" in self.context:
            return is_project_admin(self.context["request"].user, obj)
        return False

    def get_i_am_member(self, obj):
        if "request" in self.context:
            user = self.context["request"].user
            if not user.is_anonymous() and user.cached_membership_for_project(obj):
                return True
        return False

    def get_total_closed_milestones(self, obj):
        # The "closed_milestone" attribute can be attached in the get_queryset method of the viewset.
        qs_closed_milestones = getattr(obj, "closed_milestones", None)
        if qs_closed_milestones is not None:
            return len(qs_closed_milestones)

        return obj.milestones.filter(closed=True).count()

    def get_notify_level(self, obj):
        if "request" in self.context:
            user = self.context["request"].user
            return user.is_authenticated() and user.get_notify_level(obj)

        return None

    def get_total_watchers(self, obj):
        # The "valid_notify_policies" attribute can be attached in the get_queryset method of the viewset.
        qs_valid_notify_policies = getattr(obj, "valid_notify_policies", None)
        if qs_valid_notify_policies is not None:
            return len(qs_valid_notify_policies)

        return obj.notify_policies.exclude(notify_level=NotifyLevel.none).count()

    def get_logo_small_url(self, obj):
        return services.get_logo_small_thumbnail_url(obj)

    def get_logo_big_url(self, obj):
        return services.get_logo_big_thumbnail_url(obj)