• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

liqd / adhocracy-plus / 18908688697

29 Oct 2025 12:59PM UTC coverage: 44.622% (-44.5%) from 89.135%
18908688697

Pull #2986

github

web-flow
Merge 1dfde8ee7 into 445e1d498
Pull Request #2986: Draft: Speed up Github Ci Tests

3012 of 6750 relevant lines covered (44.62%)

0.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/apps/ideas/serializers.py
1
from django.contrib.contenttypes.models import ContentType
×
2
from django.utils.html import strip_tags
×
3
from rest_framework import serializers
×
4

5
from adhocracy4.api.dates import get_date_display
×
6
from adhocracy4.categories.models import Category
×
7
from adhocracy4.labels.models import Label
×
8
from adhocracy4.ratings.models import Rating
×
9

10
from .models import Idea
×
11

12

13
class LabelListingField(serializers.StringRelatedField):
×
14
    def to_internal_value(self, label):
×
15
        return Label.objects.get(pk=label)
×
16

17
    def to_representation(self, label):
×
18
        return {"id": label.pk, "name": label.name}
×
19

20

21
class CategoryField(serializers.Field):
×
22
    def to_internal_value(self, category):
×
23
        if category:
×
24
            return Category.objects.get(pk=category)
×
25
        else:
26
            return None
×
27

28
    def to_representation(self, category):
×
29
        return {"id": category.pk, "name": category.name}
×
30

31

32
class DescriptionSerializerField(serializers.Field):
×
33
    def to_representation(self, description):
×
34
        return strip_tags(description)
×
35

36
    def to_internal_value(self, description):
×
37
        return description
×
38

39

40
class RatingSerializer(serializers.ModelSerializer):
×
41
    class Meta:
×
42
        model = Rating
×
43
        fields = ("id", "value")
×
44

45

46
class IdeaSerializer(serializers.ModelSerializer):
×
47
    description = DescriptionSerializerField()
×
48
    created = serializers.SerializerMethodField()
×
49
    creator = serializers.SerializerMethodField()
×
50
    comment_count = serializers.SerializerMethodField()
×
51
    positive_rating_count = serializers.SerializerMethodField()
×
52
    negative_rating_count = serializers.SerializerMethodField()
×
53
    labels = LabelListingField(many=True)
×
54
    category = CategoryField()
×
55
    content_type = serializers.SerializerMethodField()
×
56
    user_rating = serializers.SerializerMethodField()
×
57
    has_rating_permission = serializers.SerializerMethodField()
×
58
    has_commenting_permission = serializers.SerializerMethodField()
×
59
    has_changing_permission = serializers.SerializerMethodField()
×
60
    has_deleting_permission = serializers.SerializerMethodField()
×
61

62
    class Meta:
×
63
        model = Idea
×
64
        fields = (
×
65
            "pk",
66
            "name",
67
            "description",
68
            "creator",
69
            "created",
70
            "reference_number",
71
            "image",
72
            "comment_count",
73
            "positive_rating_count",
74
            "negative_rating_count",
75
            "labels",
76
            "category",
77
            "content_type",
78
            "user_rating",
79
            "has_rating_permission",
80
            "has_commenting_permission",
81
            "has_changing_permission",
82
            "has_deleting_permission",
83
        )
84
        read_only_fields = ("pk", "creator", "created", "reference_number")
×
85

86
    def get_creator(self, idea):
×
87
        return idea.creator.username
×
88

89
    def get_created(self, idea):
×
90
        return get_date_display(idea.created)
×
91

92
    def get_comment_count(self, idea):
×
93
        if hasattr(idea, "comment_count"):
×
94
            return idea.comment_count
×
95
        else:
96
            return 0
×
97

98
    def get_positive_rating_count(self, idea):
×
99
        if hasattr(idea, "positive_rating_count"):
×
100
            return idea.positive_rating_count
×
101
        else:
102
            return 0
×
103

104
    def get_negative_rating_count(self, idea):
×
105
        if hasattr(idea, "negative_rating_count"):
×
106
            return idea.negative_rating_count
×
107
        else:
108
            return 0
×
109

110
    def get_content_type(self, idea):
×
111
        return ContentType.objects.get_for_model(idea).id
×
112

113
    def get_user_rating(self, idea):
×
114
        if "request" in self.context:
×
115
            user = self.context["request"].user
×
116
            if user.is_authenticated:
×
117
                ct = ContentType.objects.get_for_model(idea)
×
118
                ratings = Rating.objects.filter(
×
119
                    content_type_id=ct.id, object_pk=idea.pk, creator=user
120
                )
121
                if ratings.exists():
×
122
                    return RatingSerializer(ratings.first()).data
×
123
        return None
×
124

125
    def get_has_rating_permission(self, idea):
×
126
        request = self.context.get("request")
×
127
        if request and hasattr(request, "user"):
×
128
            user = request.user
×
129
            return user.has_perm("a4_candy_ideas.rate_idea", idea)
×
130
        return False
×
131

132
    def get_has_commenting_permission(self, idea):
×
133
        request = self.context.get("request")
×
134
        if request and hasattr(request, "user"):
×
135
            user = request.user
×
136
            return user.has_perm("a4_candy_ideas.comment_idea", idea)
×
137
        return False
×
138

139
    def get_has_changing_permission(self, idea):
×
140
        request = self.context.get("request")
×
141
        if request and hasattr(request, "user"):
×
142
            user = request.user
×
143
            return user.has_perm("a4_candy_ideas.change_idea", idea)
×
144
        return False
×
145

146
    def get_has_deleting_permission(self, idea):
×
147
        request = self.context.get("request")
×
148
        if request and hasattr(request, "user"):
×
149
            user = request.user
×
150
            return user.has_perm("a4_candy_ideas.delete_idea", idea)
×
151
        return False
×
152

153
    def create(self, validated_data):
×
154
        validated_data["creator"] = self.context["request"].user
×
155
        validated_data["module"] = self.context["view"].module
×
156

157
        return super().create(validated_data)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc