• 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

70.91
/apps/documents/models.py
1
from django.contrib.contenttypes.fields import GenericRelation
1✔
2
from django.db import models
1✔
3
from django.urls import reverse
1✔
4
from django.utils.functional import cached_property
1✔
5
from django_ckeditor_5.fields import CKEditor5Field
1✔
6

7
from adhocracy4 import transforms
1✔
8
from adhocracy4.comments import models as comment_models
1✔
9
from adhocracy4.images.validators import ImageAltTextValidator
1✔
10
from adhocracy4.models import base
1✔
11
from adhocracy4.modules import models as module_models
1✔
12

13

14
class Chapter(module_models.Item):
1✔
15
    name = models.CharField(max_length=120)
1✔
16
    comments = GenericRelation(
1✔
17
        comment_models.Comment,
18
        related_query_name="chapter",
19
        object_id_field="object_pk",
20
    )
21
    weight = models.PositiveIntegerField(default=0)
1✔
22

23
    class Meta:
1✔
24
        ordering = ("weight",)
1✔
25

26
    def __str__(self):
1✔
27
        return "{}_chapter_{}".format(str(self.module), self.pk)
×
28

29
    def get_absolute_url(self):
1✔
30
        url = reverse(
×
31
            "a4_candy_documents:chapter-detail",
32
            kwargs=dict(
33
                organisation_slug=self.project.organisation.slug, pk=str(self.pk)
34
            ),
35
        )
36
        if self.project.display_timeline and not self.module.is_in_module_cluster:
×
37
            return "{}?initialSlide={}#timeline-carousel".format(
×
38
                url, self.module.get_timeline_index
39
            )
40
        return url
×
41

42
    @cached_property
1✔
43
    def prev(self):
1✔
44
        return (
×
45
            Chapter.objects.filter(module=self.module)
46
            .filter(weight__lt=self.weight)
47
            .order_by("-weight")
48
            .first()
49
        )
50

51
    @cached_property
1✔
52
    def next(self):
1✔
53
        return (
×
54
            Chapter.objects.filter(module=self.module)
55
            .filter(weight__gt=self.weight)
56
            .order_by("weight")
57
            .first()
58
        )
59

60

61
class Paragraph(base.TimeStampedModel):
1✔
62
    name = models.CharField(max_length=120, blank=True)
1✔
63
    text = CKEditor5Field(
1✔
64
        config_name="image-editor", validators=[ImageAltTextValidator()]
65
    )
66

67
    weight = models.PositiveIntegerField()
1✔
68
    chapter = models.ForeignKey(
1✔
69
        Chapter, on_delete=models.CASCADE, related_name="paragraphs"
70
    )
71
    comments = GenericRelation(
1✔
72
        comment_models.Comment,
73
        related_query_name="paragraph",
74
        object_id_field="object_pk",
75
    )
76

77
    class Meta:
1✔
78
        ordering = ("weight",)
1✔
79

80
    def __str__(self):
1✔
81
        return "{}_paragraph_{}".format(str(self.chapter), self.weight)
×
82

83
    def save(self, update_fields=None, *args, **kwargs):
1✔
84
        self.text = transforms.clean_html_field(self.text, "image-editor")
×
85
        if update_fields:
×
86
            update_fields = {"text"}.union(update_fields)
×
87
        super().save(update_fields=update_fields, *args, **kwargs)
×
88

89
    def get_absolute_url(self):
1✔
90
        return reverse(
×
91
            "a4_candy_documents:paragraph-detail",
92
            kwargs=dict(
93
                organisation_slug=self.chapter.project.organisation.slug,
94
                pk=str(self.pk),
95
            ),
96
        )
97

98
    @property
1✔
99
    def creator(self):
1✔
100
        return self.chapter.creator
×
101

102
    @property
1✔
103
    def project(self):
1✔
104
        return self.module.project
×
105

106
    @property
1✔
107
    def module(self):
1✔
108
        return self.chapter.module
×
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