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

iplweb / bpp / 0950478e-207f-4389-967f-fb3a6c1090d4

01 Apr 2025 12:57PM UTC coverage: 43.279% (-3.3%) from 46.628%
0950478e-207f-4389-967f-fb3a6c1090d4

push

circleci

mpasternak
Merge branch 'release/v202504.1175'

1 of 19 new or added lines in 5 files covered. (5.26%)

1780 existing lines in 123 files now uncovered.

15876 of 36683 relevant lines covered (43.28%)

0.79 hits per line

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

62.07
src/bpp/models/profile.py
1
"""
2
Profile użytkowników serwisu BPP
3
"""
4

5
from datetime import timedelta
2✔
6

7
from django.conf import settings
2✔
8
from django.db import models
2✔
9
from django.dispatch import receiver
2✔
10

11
from django.contrib.auth.models import AbstractUser, UserManager
2✔
12

13
from django.utils import timezone
2✔
14
from django.utils.functional import cached_property
2✔
15
from django.utils.itercompat import is_iterable
2✔
16

17
from bpp.const import PUSTY_ADRES_EMAIL
2✔
18
from bpp.models import ModelZAdnotacjami
2✔
19

20

21
class BppUserManager(UserManager):
2✔
22
    model = "bpp.BppUser"
2✔
23

24

25
class BppUser(AbstractUser, ModelZAdnotacjami):
2✔
26
    active_charmap_tab = models.IntegerField(default=0)
2✔
27

28
    per_page = models.IntegerField(
2✔
29
        "Ilość wyświetlanych rekordów na stronie", default=20
30
    )
31

32
    multiseek_format = models.CharField(
2✔
33
        "Ostatnio wybrany format wyświetlania w Multiseeku",
34
        max_length=200,
35
        null=True,
36
        blank=True,
37
    )
38

39
    multiseek_order_1 = models.CharField(
2✔
40
        "Ostatnio wybrane pole sortowania w Multiseeku",
41
        max_length=200,
42
        null=True,
43
        blank=True,
44
    )
45

46
    pbn_token = models.CharField(max_length=128, null=True, blank=True)
2✔
47
    pbn_token_updated = models.DateTimeField(null=True, blank=True)
2✔
48

49
    przedstawiaj_w_pbn_jako = models.ForeignKey(
2✔
50
        "bpp.BppUser",
51
        blank=True,
52
        null=True,
53
        on_delete=models.SET_NULL,
54
        help_text="Jeżeli wybrany użytkownik nie ma konta w PBNie, może nadal wysyłać prace jako inny użytkiownik "
55
        "systemu BPP; wybierz konto z którego ma być wysyłane w tym polu. ",
56
    )
57

58
    def pbn_token_possibly_valid(self):
2✔
UNCOV
59
        if (
1✔
60
            self.pbn_token is None
61
            or not self.pbn_token
62
            or self.pbn_token_updated is None
63
        ):
UNCOV
64
            return False
1✔
65

66
        delta = timezone.now() - self.pbn_token_updated
×
67
        if delta > timedelta(hours=settings.PBN_TOKEN_HOURS_GRACE_TIME):
×
68
            return False
×
69

70
        return True
×
71

72
    class Meta:
2✔
73
        app_label = "bpp"
2✔
74
        verbose_name = "użytkownik"
2✔
75
        verbose_name_plural = "użytkownicy"
2✔
76

77
    objects = BppUserManager()
2✔
78

79
    @cached_property
2✔
80
    def cached_groups(self):
2✔
UNCOV
81
        return self.groups.all()
1✔
82

83
    def clean(self):
2✔
84
        if self.pk is not None:
×
85
            if self.przedstawiaj_w_pbn_jako_id == self.pk:
×
86
                from django.forms import ValidationError
×
87

88
                raise ValidationError(
×
89
                    {
90
                        "przedstawiaj_w_pbn_jako": "Nie ma potrzeby ustawiać tego pola jako linku do samego siebie. "
91
                    }
92
                )
93

94
    def get_pbn_user(self):
2✔
UNCOV
95
        if self.przedstawiaj_w_pbn_jako_id:
1✔
96
            return self.przedstawiaj_w_pbn_jako
×
UNCOV
97
        return self
1✔
98

99

100
# Uzupełnianie pól użytkownika na bazie LDAP:
101

102
if getattr(settings, "AUTH_LDAP_SERVER_URI", None):
2✔
103
    from django_auth_ldap.backend import populate_user
×
104

105
    @receiver(populate_user)
×
106
    def populate_bppuser(user, ldap_user, **kwargs):
×
107
        # Populate the Django user from the LDAP directory.
108

109
        AUTH_LDAP_USER_ATTR_MAP = {
×
110
            "first_name": ("givenName", "BrakImieniaWActiveDirectory"),
111
            "last_name": ("sn", "BrakNazwiskaWActiveDirectory"),
112
            "email": ("mail", PUSTY_ADRES_EMAIL),
113
        }
114

115
        for attr, value in AUTH_LDAP_USER_ATTR_MAP.items():
×
116
            ldap_attr, default = value
×
117
            ldap_value = ldap_user.attrs.get(ldap_attr, value)
×
118

119
            if is_iterable(ldap_value):
×
120
                ldap_value = " ".join([str(x) for x in ldap_value])
×
121
            setattr(user, attr, ldap_value)
×
122

123
        user.is_active = True
×
124

125
        # Zresetuj uprawnienia superużytkownika i 'w zespole' dla użytkowników
126
        # autoryzujących się po LDAP:
127
        user.is_superuser = False
×
128
        user.is_staff = False
×
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