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

iplweb / bpp / 49150ee2-a89b-4df8-9538-55cb06c06872

24 Aug 2025 11:07PM UTC coverage: 42.715% (+1.5%) from 41.169%
49150ee2-a89b-4df8-9538-55cb06c06872

push

circleci

mpasternak
Merge branch 'release/v202508.1207'

1 of 1 new or added line in 1 file covered. (100.0%)

1119 existing lines in 82 files now uncovered.

16660 of 39003 relevant lines covered (42.71%)

1.16 hits per line

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

44.83
src/pbn_api/models/base.py
1
import warnings
3✔
2

3
from django.db import models
3✔
4
from django.db.models import JSONField
3✔
5

6
from django.utils.functional import cached_property
3✔
7

8

9
class BasePBNModel(models.Model):
3✔
10
    created_on = models.DateTimeField(auto_now_add=True)
3✔
11
    last_updated_on = models.DateTimeField(auto_now=True)
3✔
12

13
    class Meta:
3✔
14
        abstract = True
3✔
15

16

17
MAX_TEXT_FIELD_LENGTH = 350
3✔
18

19

20
class BasePBNMongoDBModel(BasePBNModel):
3✔
21
    mongoId = models.CharField(max_length=32, primary_key=True)
3✔
22
    status = models.CharField(max_length=32, db_index=True)
3✔
23
    verificationLevel = models.CharField(max_length=32, db_index=True)
3✔
24
    verified = models.BooleanField(default=False, db_index=True)
3✔
25
    versions = JSONField()
3✔
26

27
    # Nazwy pól wyciaganych "na wierzch" do pól obiektu
28
    # ze słownika JSONa (pole 'values')
29
    pull_up_on_save = None
3✔
30

31
    def _pull_up_on_save(self):
3✔
UNCOV
32
        for attr in self.pull_up_on_save:
×
UNCOV
33
            if hasattr(self, f"pull_up_{attr}"):
×
UNCOV
34
                fn = getattr(self, f"pull_up_{attr}")
×
UNCOV
35
                v = fn()
×
36
            else:
UNCOV
37
                v = self.value_or_none("object", attr)
×
38

UNCOV
39
            if v is not None:
×
40
                # Tylko błędne rekordy (takie, które zawieraja pola dlugosci kilkudziesieciu kilobajtow)
41
                # zawieraja bardzo dlugie wpisy. Np jeden rekord w polu 'nazwisko' ma 10 kb nazwisk,
42
                # po przecinku. Oczywiscie, ze sa bledne. PostgreSQL jednakze ma limit na wielkosc
43
                # wiersza indeksu. I tego limitu bedziemy teraz przestrzegali:
UNCOV
44
                if isinstance(v, str):
×
UNCOV
45
                    if len(v) >= MAX_TEXT_FIELD_LENGTH:
×
46
                        v = v[:MAX_TEXT_FIELD_LENGTH]
×
UNCOV
47
            setattr(self, attr, v)
×
48

49
    def save(
3✔
50
        self, force_insert=False, force_update=False, using=None, update_fields=None
51
    ):
UNCOV
52
        if self.pull_up_on_save:
×
UNCOV
53
            self._pull_up_on_save()
×
UNCOV
54
        return super().save(
×
55
            force_insert=force_insert,
56
            force_update=force_update,
57
            using=using,
58
            update_fields=update_fields,
59
        )
60

61
    @cached_property
3✔
62
    def current_version(self):
3✔
UNCOV
63
        if self.versions:
×
UNCOV
64
            for elem in self.versions:
×
UNCOV
65
                if elem["current"]:
×
UNCOV
66
                    return elem
×
67

68
    def value(self, *path, return_none=False):
3✔
UNCOV
69
        v = self.current_version
×
UNCOV
70
        if v is None:
×
71
            warnings.warn(
×
72
                f"Model {self.__class__} with id {self.mongoId} has NO current_version!"
73
            )
74
            if return_none:
×
75
                return
×
76
            return "[brak current_version]"
×
77

UNCOV
78
        for elem in path:
×
UNCOV
79
            if elem in v:
×
UNCOV
80
                v = v[elem]
×
81
            else:
UNCOV
82
                if return_none:
×
UNCOV
83
                    return None
×
84
                return f"[brak {elem}]"
×
UNCOV
85
        return v
×
86

87
    def value_or_none(self, *path):
3✔
UNCOV
88
        return self.value(*path, return_none=True)
×
89

90
    def website(self):
3✔
91
        return self.value("object", "website")
×
92

93
    class Meta:
3✔
94
        abstract = True
3✔
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

© 2026 Coveralls, Inc