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

iplweb / bpp / 0950478e-207f-4389-967f-fb3a6c1090d4

01 Apr 2025 12:57PM UTC coverage: 43.279% (-3.3%) from 46.628%
0950478e-207f-4389-967f-fb3a6c1090d4

push

circleci

mpasternak
Merge branch 'release/v202504.1175'

1 of 19 new or added lines in 5 files covered. (5.26%)

1780 existing lines in 123 files now uncovered.

15876 of 36683 relevant lines covered (43.28%)

0.79 hits per line

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

53.7
src/pbn_api/admin/publication.py
1
from django import forms
2✔
2
from django.core.exceptions import ValidationError
2✔
3
from django.db import models
2✔
4

5
from pbn_api.admin.base import BaseMongoDBAdmin
2✔
6
from pbn_api.admin.filters import OdpowiednikWBPPFilter
2✔
7
from pbn_api.admin.widgets import PrettyJSONWidgetReadonly
2✔
8
from pbn_api.models import Publication
2✔
9

10
from django.contrib import admin
2✔
11

12
from bpp.models import Uczelnia
2✔
13

14

15
class PublicationFromMongoIdForm(forms.ModelForm):
2✔
16
    # mongoId = forms.CharField(max_length=32)
17

18
    def __init__(self, *args, **kwargs):
2✔
19
        self.request = kwargs.pop("request")
×
20
        super().__init__(*args, **kwargs)
×
21

22
    class Meta:
2✔
23
        model = Publication
2✔
24
        fields = ["mongoId"]
2✔
25

26
    def clean_mongoId(self):
2✔
27
        uczelnia = Uczelnia.objects.get_for_request(self.request)
×
28
        client = uczelnia.pbn_client(self.request.user.pbn_token)
×
29
        try:
×
30
            self.cleaned_data["json"] = client.get_publication_by_id(
×
31
                self.cleaned_data["mongoId"]
32
            )
33
        except Exception as e:
×
34
            raise ValidationError(
×
35
                f"Wystąpił błąd po stronie PBN podczas pobierania danych: {e}"
36
            )
37

38
        return self.cleaned_data["mongoId"]
×
39

40

41
@admin.register(Publication)
2✔
42
class PublicationAdmin(
2✔
43
    BaseMongoDBAdmin,
44
):
45
    show_full_result_count = False
2✔
46

47
    list_display = [
2✔
48
        "title",
49
        "type",
50
        "volume",
51
        "year",
52
        "publicUri",
53
        "doi",
54
        "rekord_w_bpp",
55
    ]
56
    search_fields = [
2✔
57
        "mongoId",
58
        "title",
59
        "isbn",
60
        "doi",
61
        "publicUri",
62
    ]
63

64
    formfield_overrides = {models.JSONField: {"widget": PrettyJSONWidgetReadonly}}
2✔
65

66
    fields = BaseMongoDBAdmin.readonly_fields + [
2✔
67
        "versions",
68
    ]
69

70
    list_filter = [OdpowiednikWBPPFilter] + BaseMongoDBAdmin.list_filter
2✔
71

72
    def has_add_permission(self, request):
2✔
UNCOV
73
        return False
1✔
74

75
    def get_fields(self, request, obj=None):
2✔
76
        if obj is None:
×
77
            return ["mongoId"]
×
78
        return super().get_fields(request, obj)
×
79

80
    def get_readonly_fields(self, request, obj=None):
2✔
81
        if obj is None:
×
82
            return []
×
83
        return super().get_readonly_fields(request, obj)
×
84

85
    def get_form(self, request, obj=None, change=False, **kwargs):
2✔
86
        if not change:
×
87

88
            class RequestPublicationFromMongoIdForm(PublicationFromMongoIdForm):
×
89
                def __new__(cls, *args, **kwargs):
×
90
                    kwargs["request"] = request
×
91
                    return PublicationFromMongoIdForm(*args, **kwargs)
×
92

93
            return RequestPublicationFromMongoIdForm
×
94

95
        return super().get_form(request=request, obj=obj, change=change, **kwargs)
×
96

97
    def save_model(self, request, obj, form, change):
2✔
98
        """
99
        Given a model instance save it to the database.
100
        """
101
        from pbn_api.integrator import zapisz_mongodb
×
102

103
        zapisz_mongodb(form.cleaned_data["json"], Publication)
×
104
        obj.refresh_from_db()
×
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