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

iplweb / bpp / 67f84fd3-e142-4d2b-aa7f-f040679bff5b

11 Aug 2025 01:15PM UTC coverage: 45.341% (+5.5%) from 39.858%
67f84fd3-e142-4d2b-aa7f-f040679bff5b

push

circleci

mpasternak
Merge branch 'release/v202508.1187'

1 of 1 new or added line in 1 file covered. (100.0%)

1383 existing lines in 91 files now uncovered.

17229 of 37999 relevant lines covered (45.34%)

1.17 hits per line

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

57.41
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
3✔
5
from crossref_bpp.core import Komparator
3✔
6
from crossref_bpp.models import CrossrefAPICache
3✔
7
from ..views.api import ostatnia_dyscyplina, ostatnia_jednostka
3✔
8

9
from bpp import const
3✔
10

11

12
class KorzystaZCrossRefAPIMixin:
3✔
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:
3✔
UNCOV
18
        if request.method == "GET":
2✔
UNCOV
19
            nz = request.GET.get(const.CROSSREF_API_PARAM, "")
2✔
UNCOV
20
            if nz:
2✔
21
                return CrossrefAPICache.objects.get_by_doi(nz)
×
22

23

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

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

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

35

36
class KorzystaZCrossRefAPIAutorInlineMixin(InlineMixin, KorzystaZCrossRefAPIMixin):
3✔
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"
3✔
44

45

46
class KorzystaZCrossRefAPIStreszczenieInlineMixin(
3✔
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"
3✔
56

57
    def get_extra_json_list_length(self, json_data):
3✔
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(
3✔
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):
3✔
UNCOV
74
        z = self.get_crossref_api_data(request)
2✔
UNCOV
75
        if z is not None:
2✔
76
            return convert_crossref_to_changeform_initial_data(z)
×
77

UNCOV
78
        return super().get_changeform_initial_data(request)
2✔
79

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

UNCOV
83
        z = self.get_crossref_api_data(request)
2✔
84

UNCOV
85
        if z is None:
2✔
UNCOV
86
            return super().get_formset_kwargs(request, obj, inline, prefix)
2✔
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