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

iplweb / bpp / 58b9a630-8512-44e6-b730-daac96d1c4d7

29 Aug 2025 07:21AM UTC coverage: 47.493% (+2.5%) from 45.008%
58b9a630-8512-44e6-b730-daac96d1c4d7

push

circleci

mpasternak
Fix tests

6 of 27 new or added lines in 2 files covered. (22.22%)

1342 existing lines in 64 files now uncovered.

19323 of 40686 relevant lines covered (47.49%)

1.51 hits per line

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

10.26
src/import_dyscyplin/core.py
UNCOV
1
import openpyxl
1✔
UNCOV
2
from _decimal import Decimal, InvalidOperation
1✔
UNCOV
3
from openpyxl.utils.exceptions import InvalidFileException
1✔
4

UNCOV
5
from import_common.core import matchuj_autora, matchuj_jednostke, matchuj_wydzial
1✔
UNCOV
6
from import_common.exceptions import (
1✔
7
    BadNoOfSheetsException,
8
    HeaderNotFoundException,
9
    ImproperFileException,
10
)
UNCOV
11
from import_dyscyplin.models import Import_Dyscyplin_Row
1✔
12

UNCOV
13
from bpp.models import Jednostka
1✔
14

15

UNCOV
16
def przeanalizuj_plik_xls(sciezka, parent):
1✔
17
    """
18
    :param sciezka:
19
    :return: (success:boolean, message)
20
    """
21

22
    # Otwórz plik i sprawdź, czy w ogóle działa...
23
    try:
×
24
        f = openpyxl.load_workbook(sciezka)
×
25
    except InvalidFileException as e:
×
26
        raise ImproperFileException(e)
×
27

28
    # Sprawdź, ile jest skoroszytów
29
    if len(f.worksheets) != 1:
×
30
        raise BadNoOfSheetsException()
×
31

32
    s = f.worksheets[0]
×
33

34
    if parent.kolumna_set.all().count() == 0:
×
35
        raise HeaderNotFoundException()
×
36

37
    naglowek = [k.rodzaj_pola for k in parent.kolumna_set.all()]
×
38

39
    wydzial_cache = {}
×
40
    jednostka_cache = {}
×
41

42
    for n, row in enumerate(
×
43
        s.iter_rows(
44
            min_row=parent.wiersz_naglowka + 1, max_row=s.max_row, values_only=True
45
        ),
46
        parent.wiersz_naglowka + 1,
47
    ):
48
        original = dict(zip(naglowek, [elem for elem in row]))
×
49

50
        if original["nazwisko"] is None or (not original["nazwisko"].strip()):
×
51
            continue
×
52

53
        try:
×
54
            # templatka wymaga
55
            original["nazwa_jednostki"] = original["nazwa jednostki"]
×
56
        except KeyError:
×
57
            original["nazwa_jednostki"] = None
×
58

59
        try:
×
60
            wydzial = wydzial_cache.get(original["wydział"])
×
61
        except KeyError:
×
62
            wydzial = None
×
63

64
        if not wydzial:
×
65
            try:
×
66
                wydzial = wydzial_cache[original["wydział"]] = matchuj_wydzial(
×
67
                    original["wydział"]
68
                )
69
            except KeyError:
×
70
                pass
×
71

72
        try:
×
73
            jednostka = jednostka_cache.get(original["nazwa jednostki"])
×
74
        except KeyError:
×
75
            jednostka = None
×
76

77
        if not jednostka:
×
78
            try:
×
79
                jednostka = jednostka_cache[
×
80
                    original["nazwa jednostki"]
81
                ] = matchuj_jednostke(original["nazwa jednostki"])
82
            except (
×
83
                KeyError,
84
                Jednostka.DoesNotExist,
85
                Jednostka.MultipleObjectsReturned,
86
            ):
87
                jednostka = None
×
88

89
        autor = matchuj_autora(
×
90
            original["imię"],
91
            original["nazwisko"],
92
            jednostka=jednostka,
93
            orcid=original.get("orcid", None),
94
            pbn_id=original.get("pbn_id", None),
95
            tytul_str=original.get("tytuł"),
96
        )
97

98
        if autor is None:
×
99
            pass
×
100

101
        bledny = False
×
102

103
        for elem in ["procent dyscypliny", "procent subdyscypliny"]:
×
104
            v = original.get(elem)
×
105

106
            if v is None:
×
107
                continue
×
108

109
            if str(v) == "":
×
110
                original[elem] = None
×
111
                continue
×
112

113
            try:
×
114
                original[elem] = Decimal(original.get(elem))
×
115
            except (TypeError, InvalidOperation):
×
116
                original[elem] = None
×
117
                bledny = True
×
118

119
        # Akceptujemy pliki bez pierwszej dyscypliny -- taki zapis w pliku oznacza,
120
        # że autorowi dyscyplina jest kasowana. Zatem, poniższy kod zostaje usunięty:
121
        # if original.get("dyscyplina").strip() == "":
122
        #     bledny = True
123

124
        i = Import_Dyscyplin_Row(
×
125
            row_no=n,
126
            parent=parent,
127
            original=original,
128
            nazwisko=original["nazwisko"],
129
            imiona=original["imię"],
130
            nazwa_jednostki=original.get("nazwa_jednostki"),
131
            jednostka=jednostka,
132
            nazwa_wydzialu=original.get("wydział"),
133
            wydzial=wydzial,
134
            autor=autor,
135
            dyscyplina=original.get("dyscyplina"),
136
            kod_dyscypliny=original.get("kod dyscypliny"),
137
            procent_dyscypliny=original.get("procent dyscypliny"),
138
            subdyscyplina=original.get("subdyscyplina"),
139
            kod_subdyscypliny=original.get("kod subdyscypliny"),
140
            procent_subdyscypliny=original.get("procent subdyscypliny"),
141
        )
142

143
        if i.dyscyplina is None:
×
144
            i.procent_dyscypliny = None
×
145

146
        if i.subdyscyplina is None:
×
147
            i.procent_subdyscypliny = None
×
148

149
        if autor is None:
×
150
            i.stan = Import_Dyscyplin_Row.STAN.BLEDNY
×
151
            i.info = "Nie można dopasować autora"
×
152
        else:
153
            if i.dyscyplina is None and i.subdyscyplina is not None:
×
154
                i.stan = Import_Dyscyplin_Row.STAN.BLEDNY
×
155
                i.info = "Dyscyplina pusta, subdyscyplina ustawiona."
×
156

157
            elif bledny:
×
158
                i.stan = Import_Dyscyplin_Row.STAN.BLEDNY
×
159
                i.info = (
×
160
                    "niepoprawna wartość w polu procent dyscypliny lub subdyscypliny"
161
                )
162

163
        i.save()
×
164

165
    return (True, "przeanalizowano %i rekordow" % (n - parent.wiersz_naglowka))
×
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