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

iplweb / bpp / 69252c38-21b1-49f8-98a5-a21d59416a66

17 Feb 2025 01:27AM UTC coverage: 47.492% (+0.7%) from 46.838%
69252c38-21b1-49f8-98a5-a21d59416a66

push

circleci

mpasternak
Merge branch 'release/v202502.1156'

2 of 8 new or added lines in 3 files covered. (25.0%)

2233 existing lines in 114 files now uncovered.

16671 of 35103 relevant lines covered (47.49%)

1.2 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
3✔
2
from django.core.exceptions import ValidationError
3✔
3
from django.db import models
3✔
4

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

10
from django.contrib import admin
3✔
11

12
from bpp.models import Uczelnia
3✔
13

14

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

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

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

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

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

40

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

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

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

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

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

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

75
    def get_fields(self, request, obj=None):
3✔
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):
3✔
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):
3✔
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):
3✔
98
        """
99
        Given a model instance save it to the database.
100
        """
UNCOV
101
        from pbn_api.integrator import zapisz_mongodb
×
102

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