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

iplweb / bpp / 01b10122-6bc7-4e23-9261-194304eb85ee

21 Aug 2025 05:37PM UTC coverage: 39.798% (-5.3%) from 45.095%
01b10122-6bc7-4e23-9261-194304eb85ee

push

circleci

mpasternak
Merge branch 'release/v202508.1197'

5 of 6 new or added lines in 2 files covered. (83.33%)

1716 existing lines in 99 files now uncovered.

15178 of 38138 relevant lines covered (39.8%)

0.4 hits per line

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

12.28
src/formdefaults/core.py
1
import json
1✔
2

3
from django.db import transaction
1✔
4
from django.db.models import Q
1✔
5

6
from formdefaults.util import full_name
1✔
7

8

9
def update_form_db_repr(form_instance, form_repr, user=None):
1✔
10
    """
11
    Aktualizuje reprezentację formularza w bazie danych:
12

13
    1) usuwa wszystkie pola które są w bazie a których nie ma w formularzu
14
    2) tworzy pola które są w formularzu wraz z domyślnymi wartościami
15

16
    :type form_repr: formdefaults.models.FormRepresentation
17
    :type form_instance: django.forms.Form
18
    """
19

UNCOV
20
    form_fields = form_instance.fields
×
UNCOV
21
    form_fields_names = form_fields.keys()
×
22

UNCOV
23
    db_fields = form_repr.fields_set.all()
×
24

25
    # Usuwanie pól, których nie ma w formularzu:
UNCOV
26
    db_fields.filter(~Q(name__in=form_fields_names)).delete()
×
27

UNCOV
28
    db_fields_dict = {db_field.name: db_field for db_field in db_fields}
×
29

30
    # Przeleć listę pól, w razie potrzeby aktualizując typ lub etykietę
UNCOV
31
    for no, field_name in enumerate(form_fields_names):
×
UNCOV
32
        form_field = form_fields[field_name]
×
33

UNCOV
34
        db_field = db_fields_dict.get(field_name)
×
35

UNCOV
36
        created = False
×
UNCOV
37
        if db_field is None:
×
UNCOV
38
            created = True
×
UNCOV
39
            db_field = db_fields.create(
×
40
                parent=form_repr,
41
                name=field_name,
42
                klass=full_name(form_field),
43
                label=form_field.label or field_name.replace("_", " ").capitalize(),
44
                order=no,
45
            )
46

UNCOV
47
        updated = False
×
UNCOV
48
        if db_field.label != form_field.label:
×
UNCOV
49
            db_field.label = form_field.label
×
UNCOV
50
            updated = True
×
51

UNCOV
52
        if full_name(form_field) != db_field.klass:
×
53
            db_field.klass = full_name(form_field)
×
54
            updated = True
×
55

UNCOV
56
        if updated:
×
UNCOV
57
            db_field.save()
×
58

59
        # Sprawdź, czy wartość domyślna pola może być zapisana w bazie, tzn. czy
60
        # poddaje się 'testowi' zakodowania jej w formacie JSON. Na tym etapie jeżeli
61
        # wartość domyślna jest liczona np za pomocą funkcji, to system przejdzie
62
        # do kolejnego pola, bez tworzenia wartości domyślnej w bazie danych.
UNCOV
63
        form_field_value = form_field.initial
×
UNCOV
64
        try:
×
UNCOV
65
            json.dumps(form_field_value)
×
UNCOV
66
        except TypeError:
×
UNCOV
67
            if not created:
×
68
                db_field.delete()
×
UNCOV
69
            continue
×
70

UNCOV
71
        if created:
×
72
            # Reprezentację pola w bazie danych własnie utworzono, więc z tej okazji
73
            # zapisz do bazy danych wartość domyślną tego pola w momencie tworzenia go:
UNCOV
74
            form_repr.values_set.create(
×
75
                field=db_field, value=form_field_value, user=user
76
            )
77

78
        # Jeżeli jest podany użytkownik to sprawdź, czy dla niego jest wpis w bazie danych;
79
        # Jeżeli tego wpisu nie ma to utwórz go z wartością domyślną
UNCOV
80
        if user is not None:
×
81
            user_value, created = form_repr.values_set.get_or_create(
×
82
                field=db_field, user=user
83
            )
84

85
            if created:
×
86
                user_value.value = form_field_value
×
87
                user_value.save()
×
88

89

90
@transaction.atomic
1✔
91
def get_form_defaults(form_instance, label=None, user=None, update_db_repr=True):
1✔
UNCOV
92
    fn = full_name(form_instance)
×
93

UNCOV
94
    from formdefaults.models import FormRepresentation
×
95

UNCOV
96
    form_repr, crt = FormRepresentation.objects.get_or_create(full_name=fn)
×
97

UNCOV
98
    if update_db_repr:
×
UNCOV
99
        if label is not None:
×
UNCOV
100
            if form_repr.label != label:
×
UNCOV
101
                form_repr.label = label
×
UNCOV
102
                form_repr.save()
×
103

104
        # Automatyczne tworzenie reprezentacji bazodanowej formularza w tej
105
        # funkcji NIE przewiduje tworzenia oddzielnych ustaleń dla danego użytkownika
UNCOV
106
        update_form_db_repr(form_instance, form_repr, user=None)
×
107

108
    # Weź listę domyślnych wartości (czyli takich gdzie user=None)
UNCOV
109
    values = dict(
×
110
        [
111
            (qs["field__name"], qs["value"])
112
            for qs in form_repr.values_set.filter(user=None)
113
            .select_related("field__name")
114
            .values("field__name", "value")
115
        ]
116
    )
117

118
    # Weź listę wartości dla danego użytkownika
UNCOV
119
    if user is not None:
×
120
        user_values = dict(
×
121
            [
122
                (qs["field__name"], qs["value"])
123
                for qs in form_repr.values_set.filter(user=user)
124
                .select_related("field__name")
125
                .values("field__name", "value")
126
            ]
127
        )
128
        values.update(user_values)
×
129

UNCOV
130
    values.update(
×
131
        {
132
            "formdefaults_pre_html": form_repr.html_before,
133
            "formdefaults_post_html": form_repr.html_after,
134
        }
135
    )
136

UNCOV
137
    return values
×
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