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

iplweb / bpp / 18634744198

19 Oct 2025 07:00PM UTC coverage: 31.618% (-29.9%) from 61.514%
18634744198

push

github

mpasternak
Merge branch 'release/v202510.1270'

657 of 9430 branches covered (6.97%)

Branch coverage included in aggregate %.

229 of 523 new or added lines in 42 files covered. (43.79%)

11303 existing lines in 316 files now uncovered.

14765 of 39346 relevant lines covered (37.53%)

0.38 hits per line

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

47.44
src/bpp/admin/crossref_api_helpers.py
1
"""Klasy pomocnicze dla klas ModelAdmin które chcą korzystać z parametru
2
GET ``numer_zgloszenia`` czyli wypełniać dane wstępne wg zawartości zgłoszenia
3
o danym numerze ID."""
4

5
from bpp import const
1✔
6
from crossref_bpp.admin.helpers import convert_crossref_to_changeform_initial_data
1✔
7
from crossref_bpp.core import Komparator
1✔
8
from crossref_bpp.models import CrossrefAPICache
1✔
9

10
from ..views.api import ostatnia_dyscyplina, ostatnia_jednostka
1✔
11

12

13
class KorzystaZCrossRefAPIMixin:
1✔
14
    """Mixin dla klas korzystajacych z parametru 'identyfikator_doi', który to identyfikator
15
    powoduje wypełnienie wstępnych parametrów wg danych z CrossRef API
16
    """
17

18
    def get_crossref_api_data(self, request) -> dict | None:
1✔
19
        if request.method == "GET":
1✔
20
            nz = request.GET.get(const.CROSSREF_API_PARAM, "")
1✔
21
            if nz:
1!
UNCOV
22
                return CrossrefAPICache.objects.get_by_doi(nz)
×
23

24

25
class InlineMixin:
1✔
26
    def get_extra_json_list_length(self, json_data):
1✔
UNCOV
27
        return len(json_data.get(self.crossref_api_json_attrname, []))
×
28

29
    def get_extra(self, request, obj=None, **kwargs):
1✔
30
        z = self.get_crossref_api_data(request)
1✔
31
        if z is not None:
1!
UNCOV
32
            return self.get_extra_json_list_length(z)
×
33

34
        return super().get_extra(request=request, obj=obj, **kwargs)
1✔
35

36

37
class KorzystaZCrossRefAPIAutorInlineMixin(InlineMixin, KorzystaZCrossRefAPIMixin):
1✔
38
    """Mixin dla klas Inline znajdujacych się w formualrzach ModelAdmin,
39
    korzystajacych ze wstepnie uzupełnianych danych przez CrossRef API.
40

41
    Funkcja ``get_extra`` zwraca ilosc formularzy, jaka powinna byc wyswietlona
42
    aby pokryc zapotrzebowanie na inicjalne wartosci dla autorów."""
43

44
    crossref_api_json_attrname = "author"
1✔
45

46

47
class KorzystaZCrossRefAPIStreszczenieInlineMixin(
1✔
48
    InlineMixin, KorzystaZCrossRefAPIMixin
49
):
50
    """Mixin dla klas Inline znajdujacych się w formualrzach ModelAdmin,
51
    korzystajacych ze wstepnie uzupełnianych danych przez CrossRef API.
52

53
    Funkcja ``get_extra`` zwraca ilosc formularzy, jaka powinna byc wyswietlona
54
    aby pokryc zapotrzebowanie na inicjalne wartosci dla autorów."""
55

56
    crossref_api_json_attrname = "abstract"
1✔
57

58
    def get_extra_json_list_length(self, json_data):
1✔
UNCOV
59
        if json_data.get(self.crossref_api_json_attrname) is not None:
×
UNCOV
60
            return 1
×
61
        return self.extra
×
62

63

64
class UzupelniajWstepneDanePoCrossRefAPIMixin(
1✔
65
    KorzystaZCrossRefAPIMixin,
66
):
67
    """Mixin dla klas ModelAdmin które chcą miec wypełniane parametry wg zgłoszenia
68
    z parametru requestu GET ``identyfikator_doi``.
69

70
    Obecnie dla Wydawnictwo_Ciagle.
71

72
    """
73

74
    def get_changeform_initial_data(self, request):
1✔
75
        z = self.get_crossref_api_data(request)
1✔
76
        if z is not None:
1!
UNCOV
77
            return convert_crossref_to_changeform_initial_data(z)
×
78

79
        return super().get_changeform_initial_data(request)
1✔
80

81
    def get_formset_kwargs(self, request, obj, inline, prefix):
1✔
82
        initial = []
1✔
83

84
        z = self.get_crossref_api_data(request)
1✔
85

86
        if z is None:
1!
87
            return super().get_formset_kwargs(request, obj, inline, prefix)
1✔
88

UNCOV
89
        if (
×
90
            prefix == "autorzy_set"
91
            and obj.pk is None
92
            and str(type(inline)).find("<locals>.baseModel_AutorInline") > -1
93
        ):
UNCOV
94
            for zpa in z.get("author", []):
×
UNCOV
95
                rekord = Komparator.porownaj_author(zpa).rekord_po_stronie_bpp
×
UNCOV
96
                if rekord:
×
97
                    jednostka = ostatnia_jednostka(request, rekord)
×
98
                    dyscyplina = ostatnia_dyscyplina(
×
99
                        request,
100
                        rekord,
101
                        z.get("published", {}).get("date-parts", [[None]])[0][0],
102
                    )
103

104
                    initial.append(
×
105
                        {
106
                            "autor": rekord,
107
                            "jednostka": jednostka,
108
                            "dyscyplina_naukowa": dyscyplina,
109
                            "zapisany_jako": f"{rekord.imiona} {rekord.nazwisko}",
110
                        }
111
                    )
112
                else:
UNCOV
113
                    initial.append({})
×
114

UNCOV
115
        elif prefix == "streszczenia" and obj.pk is None:
×
UNCOV
116
            if z.get("abstract") is not None:
×
UNCOV
117
                jezyk_pk = None
×
UNCOV
118
                jezyk = Komparator.porownaj_language(
×
119
                    z.get("language")
120
                ).rekord_po_stronie_bpp
UNCOV
121
                if jezyk is not None:
×
UNCOV
122
                    jezyk_pk = jezyk.pk
×
123

UNCOV
124
                initial.append(
×
125
                    {
126
                        "jezyk_streszczenia": jezyk_pk,
127
                        "streszczenie": z.get("abstract", "").replace("&#x0D;", "\n"),
128
                    }
129
                )
130

UNCOV
131
        return {
×
132
            "initial": initial,
133
        }
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