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

iplweb / bpp / 3c407b5b-8434-4f25-9e12-005b14d23a79

07 Sep 2025 02:53PM UTC coverage: 33.615% (-8.7%) from 42.328%
3c407b5b-8434-4f25-9e12-005b14d23a79

push

circleci

mpasternak
Merge branch 'release/v202509.1221'

1 of 45 new or added lines in 2 files covered. (2.22%)

3993 existing lines in 129 files now uncovered.

16522 of 49150 relevant lines covered (33.62%)

0.34 hits per line

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

51.85
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
from crossref_bpp.admin.helpers import convert_crossref_to_changeform_initial_data
1✔
5
from crossref_bpp.core import Komparator
1✔
6
from crossref_bpp.models import CrossrefAPICache
1✔
7
from ..views.api import ostatnia_dyscyplina, ostatnia_jednostka
1✔
8

9
from bpp import const
1✔
10

11

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

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

23

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

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

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

35

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

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

43
    crossref_api_json_attrname = "author"
1✔
44

45

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

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

55
    crossref_api_json_attrname = "abstract"
1✔
56

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

62

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

69
    Obecnie dla Wydawnictwo_Ciagle.
70

71
    """
72

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

UNCOV
78
        return super().get_changeform_initial_data(request)
×
79

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

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

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

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

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

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

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

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