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

iplweb / bpp / 45740dd7-cc71-4281-8725-5e2feaa4cfe9

31 Mar 2025 07:40PM UTC coverage: 41.43% (-1.5%) from 42.953%
45740dd7-cc71-4281-8725-5e2feaa4cfe9

push

circleci

mpasternak
Merge branch 'release/v202503.1172'

1 of 3 new or added lines in 3 files covered. (33.33%)

1248 existing lines in 81 files now uncovered.

15182 of 36645 relevant lines covered (41.43%)

0.41 hits per line

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

56.3
src/bpp/multiseek_registry/fields.py
1
from django.conf import settings
1✔
2
from mptt.forms import TreeNodeChoiceFieldMixin
1✔
3
from mptt.settings import DEFAULT_LEVEL_INDICATOR
1✔
4
from taggit.models import Tag
1✔
5

6
from .mixins import BppMultiseekVisibilityMixin
1✔
7

8
from django.contrib.postgres.search import SearchQuery
1✔
9

10
from django.utils.itercompat import is_iterable
1✔
11

12
from bpp.models.konferencja import Konferencja
1✔
13
from bpp.models.openaccess import (
1✔
14
    Czas_Udostepnienia_OpenAccess,
15
    Licencja_OpenAccess,
16
    Wersja_Tekstu_OpenAccess,
17
)
18
from bpp.models.struktura import Wydzial
1✔
19

20
NULL_VALUE = "(brak wpisanej wartości)"
1✔
21

22
from django.db.models import Q
1✔
23
from django.db.models.expressions import F
1✔
24
from multiseek import logic
1✔
25
from multiseek.logic import (
1✔
26
    AUTOCOMPLETE,
27
    DIFFERENT,
28
    DIFFERENT_ALL,
29
    DIFFERENT_FEMALE,
30
    DIFFERENT_NONE,
31
    EQUAL,
32
    EQUAL_FEMALE,
33
    EQUAL_NONE,
34
    EQUALITY_OPS_ALL,
35
    EQUALITY_OPS_FEMALE,
36
    EQUALITY_OPS_MALE,
37
    EQUALITY_OPS_NONE,
38
    VALUE_LIST,
39
    AutocompleteQueryObject,
40
    BooleanQueryObject,
41
    DateQueryObject,
42
    DecimalQueryObject,
43
    IntegerQueryObject,
44
    QueryObject,
45
    RangeQueryObject,
46
    ReportType,
47
    StringQueryObject,
48
    UnknownOperation,
49
    ValueListQueryObject,
50
)
51

52
from .. import const
1✔
53

54
from bpp.models import (
1✔
55
    Autor,
56
    Autorzy,
57
    Charakter_Formalny,
58
    Dyscyplina_Naukowa,
59
    Jednostka,
60
    Jezyk,
61
    Kierunek_Studiow,
62
    SlowaKluczoweView,
63
    Status_Korekty,
64
    Typ_Odpowiedzialnosci,
65
    Uczelnia,
66
    Wydawnictwo_Zwarte,
67
    Zewnetrzna_Baza_Danych,
68
    ZewnetrzneBazyDanychView,
69
    Zrodlo,
70
)
71
from bpp.models.system import Typ_KBN
1✔
72

73
UNION = "równy+wspólny"
1✔
74
UNION_FEMALE = "równa+wspólna"
1✔
75
UNION_NONE = "równe+wspólne"
1✔
76
UNION_OPS_ALL = [UNION, UNION_FEMALE, UNION_NONE]
1✔
77

78

79
class TytulPracyQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
80
    label = "Tytuł pracy"
1✔
81
    field_name = "tytul_oryginalny"
1✔
82

83
    def real_query(self, value, operation):
1✔
84
        ret = super(StringQueryObject, self).real_query(
×
85
            value, operation, validate_operation=False
86
        )
87

88
        if ret is not None:
×
89
            return ret
×
90

91
        elif operation in [logic.CONTAINS, logic.NOT_CONTAINS]:
×
92
            if not value:
×
93
                return Q(pk=F("pk"))
×
94

95
            query = None
×
96

97
            if operation == logic.CONTAINS:
×
98
                value = [x.strip() for x in value.split(" ") if x.strip()]
×
99
                for elem in value:
×
100
                    elem = SearchQuery(elem, config="bpp_nazwy_wlasne")
×
101
                    if query is None:
×
102
                        query = elem
×
103
                        continue
×
104
                    query &= elem
×
105

106
            else:
107
                # Jeżeli "nie zawiera", to nie tokenizuj spacjami
108
                query = ~SearchQuery(value, config="bpp_nazwy_wlasne")
×
109

110
            ret = Q(search_index=query)
×
111

112
        elif operation in [logic.STARTS_WITH, logic.NOT_STARTS_WITH]:
×
113
            ret = Q(**{self.field_name + "__istartswith": value})
×
114

115
            if operation in [logic.NOT_STARTS_WITH]:
×
116
                ret = ~ret
×
117
        else:
118
            raise UnknownOperation(operation)
×
119

120
        return ret
×
121

122

123
class AdnotacjeQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
124
    label = "Adnotacje"
1✔
125
    field_name = "adnotacje"
1✔
126
    public = False
1✔
127

128

129
class DOIQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
130
    label = "DOI"
1✔
131
    field_name = "doi"
1✔
132
    public = False
1✔
133

134

135
class InformacjeQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
136
    label = "Informacje"
1✔
137
    field_name = "informacje"
1✔
138

139

140
class SzczegolyQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
141
    label = "Szczegóły"
1✔
142
    field_name = "szczegoly"
1✔
143

144

145
class UwagiQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
146
    label = "Uwagi"
1✔
147
    field_name = "uwagi"
1✔
148

149

150
class SlowaKluczoweQueryObject(BppMultiseekVisibilityMixin, AutocompleteQueryObject):
1✔
151
    type = AUTOCOMPLETE
1✔
152
    ops = [EQUAL_NONE, DIFFERENT_NONE]
1✔
153
    model = Tag
1✔
154
    search_fields = ["name"]
1✔
155
    url = "bpp:public-taggit-tag-autocomplete"
1✔
156
    label = "Słowa kluczowe"
1✔
157
    field_name = "slowa_kluczowe"
1✔
158

159
    def real_query(self, value, operation):
1✔
160
        if operation in EQUALITY_OPS_ALL:
×
161
            ret = Q(
×
162
                pk__in=SlowaKluczoweView.objects.filter(tag__name=value).values(
163
                    "rekord_id"
164
                )
165
            )
166

167
        else:
168
            raise UnknownOperation(operation)
×
169

170
        if operation in DIFFERENT_ALL:
×
171
            return ~ret
×
172

173
        return ret
×
174

175

176
class DataUtworzeniaQueryObject(BppMultiseekVisibilityMixin, DateQueryObject):
1✔
177
    label = "Data utworzenia"
1✔
178
    field_name = "utworzono"
1✔
179
    public = False
1✔
180

181
    def value_for_description(self, value):
1✔
182
        value = self.value_from_web(value)
×
183
        if value is None:
×
184
            return NULL_VALUE
×
185
        if is_iterable(value):
×
186
            return f"od {value[0]} do {value[1]}"
×
187
        return str(value)
×
188

189

190
class OstatnioZmieniony(DataUtworzeniaQueryObject):
1✔
191
    label = "Ostatnio zmieniony"
1✔
192
    field_name = "ostatnio_zmieniony"
1✔
193
    public = False
1✔
194

195

196
class ForeignKeyDescribeMixin:
1✔
197
    def value_for_description(self, value):
1✔
198
        if value is None:
×
199
            return NULL_VALUE
×
200

201
        return self.value_from_web(value) or "[powiązany obiekt został usunięty]"
×
202

203

204
class NazwiskoIImieQueryObject(
1✔
205
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
206
):
207
    label = "Nazwisko i imię"
1✔
208
    type = AUTOCOMPLETE
1✔
209
    ops = [EQUAL_NONE, DIFFERENT_NONE, UNION_NONE]
1✔
210
    model = Autor
1✔
211
    search_fields = ["nazwisko", "imiona"]
1✔
212
    field_name = "autor"
1✔
213
    url = "bpp:public-autor-autocomplete"
1✔
214

215
    def real_query(self, value, operation):
1✔
216
        if operation in EQUALITY_OPS_ALL:
×
217
            ret = Q(autorzy__autor=value)
×
218

219
        elif operation in UNION_OPS_ALL:
×
220
            q = Autorzy.objects.filter(autor=value).values("rekord_id")
×
221

222
            ret = Q(pk__in=q)
×
223
        else:
224
            raise UnknownOperation(operation)
×
225

226
        if operation in DIFFERENT_ALL:
×
227
            return ~ret
×
228

229
        return ret
×
230

231

232
class WydawnictwoNadrzedneQueryObject(
1✔
233
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
234
):
235
    label = "Wydawnictwo nadrzędne"
1✔
236
    type = AUTOCOMPLETE
1✔
237
    ops = [
1✔
238
        EQUAL_NONE,
239
        DIFFERENT_NONE,
240
    ]
241
    model = Wydawnictwo_Zwarte
1✔
242
    search_fields = [
1✔
243
        "tytul_oryginalny",
244
    ]
245
    field_name = "wydawnictwo_nadrzedne"
1✔
246
    url = "bpp:public-wydawnictwo-nadrzedne-autocomplete"
1✔
247

248
    def real_query(self, value, operation):
1✔
249
        if operation in EQUALITY_OPS_ALL:
×
250
            ret = Q(wydawnictwo_nadrzedne=value)
×
251

252
        else:
253
            raise UnknownOperation(operation)
×
254

255
        if operation in DIFFERENT_ALL:
×
256
            return ~ret
×
257

258
        return ret
×
259

260

261
class StatusKorektyQueryObject(
1✔
262
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
263
):
264
    label = "Status korekty"
1✔
265
    type = AUTOCOMPLETE
1✔
266
    ops = [
1✔
267
        EQUAL_NONE,
268
        DIFFERENT_NONE,
269
    ]
270
    model = Status_Korekty
1✔
271
    search_fields = [
1✔
272
        "status_korekty",
273
    ]
274
    field_name = "status_korekty"
1✔
275
    url = "bpp:public-status-korekty-autocomplete"
1✔
276

277
    def real_query(self, value, operation):
1✔
278
        if operation in EQUALITY_OPS_ALL:
×
279
            ret = Q(status_korekty=value)
×
280

281
        else:
282
            raise UnknownOperation(operation)
×
283

284
        if operation in DIFFERENT_ALL:
×
285
            return ~ret
×
286

287
        return ret
×
288

289

290
class ORCIDQueryObject(BppMultiseekVisibilityMixin, StringQueryObject):
1✔
291
    label = "ORCID"
1✔
292
    ops = [EQUAL_NONE, DIFFERENT_NONE]
1✔
293
    field_name = "autorzy__autor__orcid"
1✔
294

295

296
class NazwiskoIImieWZakresieKolejnosci(NazwiskoIImieQueryObject):
1✔
297
    ops = [EQUAL, UNION_NONE]
1✔
298
    kolejnosc_gte = None
1✔
299
    kolejnosc_lt = None
1✔
300

301
    def real_query(self, value, operation):
1✔
302
        if operation in EQUALITY_OPS_ALL:
×
303
            ret = Q(
×
304
                autorzy__autor=value,
305
                autorzy__kolejnosc__gte=self.kolejnosc_gte,
306
                autorzy__kolejnosc__lt=self.kolejnosc_lt,
307
            )
308

309
        elif operation in UNION_OPS_ALL:
×
310
            q = Autorzy.objects.filter(
×
311
                autor=value,
312
                kolejnosc__gte=self.kolejnosc_gte,
313
                kolejnosc__lt=self.kolejnosc_lt,
314
            ).values("rekord_id")
315
            ret = Q(pk__in=q)
×
316

317
        else:
318
            raise UnknownOperation(operation)
×
319

320
        if operation in DIFFERENT_ALL:
×
321
            return ~ret
×
322

323
        return ret
×
324

325

326
class PierwszeNazwiskoIImie(NazwiskoIImieWZakresieKolejnosci):
1✔
327
    kolejnosc_gte = 0
1✔
328
    kolejnosc_lt = 1
1✔
329
    label = "Pierwsze nazwisko i imię"
1✔
330
    field_name = "naz_im_pierwsz"
1✔
331

332

333
class OstatnieNazwiskoIImie(NazwiskoIImieWZakresieKolejnosci):
1✔
334
    ops = [
1✔
335
        EQUAL,
336
    ]
337
    # bez operatora UNION, bo F('liczba_autorow') nie istnieje, gdy
338
    # generujemy zapytanie dla niego.
339
    kolejnosc_gte = F("liczba_autorow") - 1
1✔
340
    kolejnosc_lt = F("liczba_autorow")
1✔
341
    label = "Ostatnie nazwisko i imię"
1✔
342
    public = False
1✔
343
    field_name = "naz_im_ost"
1✔
344

345

346
class NazwiskoIImie1do3(NazwiskoIImieWZakresieKolejnosci):
1✔
347
    kolejnosc_gte = 0
1✔
348
    kolejnosc_lt = 3
1✔
349
    label = "Nazwisko i imię (od 1 do 3)"
1✔
350
    public = False
1✔
351
    field_name = "naz_im_1_3"
1✔
352

353

354
class NazwiskoIImie1do5(NazwiskoIImieWZakresieKolejnosci):
1✔
355
    kolejnosc_gte = 0
1✔
356
    kolejnosc_lt = 5
1✔
357
    label = "Nazwisko i imię (od 1 do 5)"
1✔
358
    public = False
1✔
359
    field_name = "naz_im_1_5"
1✔
360

361

362
class TypOgolnyAutorQueryObject(NazwiskoIImieQueryObject):
1✔
363
    ops = [EQUAL, DIFFERENT, UNION]
1✔
364

365
    label = "Autor"
1✔
366
    typ_ogolny = const.TO_AUTOR
1✔
367
    field_name = "typ_og_autor"
1✔
368

369
    def real_query(self, value, operation):
1✔
370
        if operation in EQUALITY_OPS_ALL:
×
371
            ret = Q(
×
372
                autorzy__autor=value,
373
                autorzy__typ_odpowiedzialnosci__typ_ogolny=self.typ_ogolny,
374
            )
375

376
        elif operation in UNION_OPS_ALL:
×
377
            q = Autorzy.objects.filter(
×
378
                autor=value, typ_odpowiedzialnosci__typ_ogolny=self.typ_ogolny
379
            ).values("rekord_id")
380
            ret = Q(pk__in=q)
×
381

382
        else:
383
            raise UnknownOperation(operation)
×
384

385
        if operation in DIFFERENT_ALL:
×
386
            return ~ret
×
387

388
        return ret
×
389

390

391
class TypOgolnyRedaktorQueryObject(TypOgolnyAutorQueryObject):
1✔
392
    typ_ogolny = const.TO_REDAKTOR
1✔
393
    label = "Redaktor"
1✔
394
    field_name = "typ_og_redaktor"
1✔
395

396

397
class TypOgolnyTlumaczQueryObject(TypOgolnyAutorQueryObject):
1✔
398
    typ_ogolny = const.TO_TLUMACZ
1✔
399
    label = "Tłumacz"
1✔
400
    field_name = "typ_og_tlumacz"
1✔
401

402

403
class TypOgolnyRecenzentQueryObject(TypOgolnyAutorQueryObject):
1✔
404
    typ_ogolny = const.TO_RECENZENT
1✔
405
    label = "Recenzent"
1✔
406
    field_name = "typ_og_recenzent"
1✔
407

408

409
class DyscyplinaQueryObject(
1✔
410
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
411
):
412
    label = "Dyscyplina naukowa autora"
1✔
413
    type = AUTOCOMPLETE
1✔
414
    ops = [
1✔
415
        EQUAL_NONE,
416
    ]
417
    model = Dyscyplina_Naukowa
1✔
418
    field_name = "nazwa"
1✔
419
    url = "bpp:dyscyplina-autocomplete"
1✔
420

421
    def real_query(self, value, operation):
1✔
422
        if operation in EQUALITY_OPS_ALL:
×
423
            ret = Q(autorzy__dyscyplina_naukowa=value)
×
424
        else:
425
            raise UnknownOperation(operation)
×
426

427
        if operation in DIFFERENT_ALL:
×
428
            return ~ret
×
429
        return ret
×
430

431

432
class NazwaKonferencji(
1✔
433
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
434
):
435
    label = "Konferencja"
1✔
436
    type = AUTOCOMPLETE
1✔
437
    ops = EQUALITY_OPS_FEMALE
1✔
438
    model = Konferencja
1✔
439
    search_fields = ["nazwa"]
1✔
440
    field_name = "konferencja"
1✔
441
    url = "bpp:public-konferencja-autocomplete"
1✔
442

443

444
class ZewnetrznaBazaDanychQueryObject(
1✔
445
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
446
):
447
    label = "Zewnętrzna baza danych"
1✔
448
    field_name = "zewn_baza_danych"
1✔
449
    type = AUTOCOMPLETE
1✔
450
    ops = [
1✔
451
        EQUAL_FEMALE,
452
    ]
453
    model = Zewnetrzna_Baza_Danych
1✔
454
    search_fields = ["nazwa"]
1✔
455
    url = "bpp:zewnetrzna-baza-danych-autocomplete"
1✔
456

457
    def real_query(self, value, operation, validate_operation=True):
1✔
458
        if operation in EQUALITY_OPS_ALL:
×
459
            q = ZewnetrzneBazyDanychView.objects.filter(baza=value).values("rekord_id")
×
460
            ret = Q(pk__in=q)
×
461
        else:
462
            raise UnknownOperation(operation)
×
463
        return ret
×
464

465

466
EQUAL_PLUS_SUB_FEMALE = "równa+podrzędne"
1✔
467
EQUAL_PLUS_SUB_UNION_FEMALE = "równa+podrzędne+wspólna"
1✔
468

469

470
class JednostkaQueryObject(
1✔
471
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
472
):
473
    label = "Jednostka"
1✔
474
    type = AUTOCOMPLETE
1✔
475
    ops = [
1✔
476
        EQUAL_FEMALE,
477
        DIFFERENT_FEMALE,
478
        EQUAL_PLUS_SUB_FEMALE,
479
        UNION_FEMALE,
480
        EQUAL_PLUS_SUB_UNION_FEMALE,
481
    ]
482
    model = Jednostka
1✔
483
    search_fields = ["nazwa"]
1✔
484
    field_name = "jednostka"
1✔
485
    url = "bpp:jednostka-widoczna-autocomplete"
1✔
486

487
    def real_query(self, value, operation):
1✔
488
        if operation in EQUALITY_OPS_ALL:
×
489
            ret = Q(autorzy__jednostka=value)
×
490

491
        elif operation == EQUAL_PLUS_SUB_FEMALE:
×
492
            ret = Q(autorzy__jednostka__in=value.get_family())
×
493

494
        elif operation in EQUAL_PLUS_SUB_UNION_FEMALE:
×
495
            q = Autorzy.objects.filter(jednostka__in=value.get_family()).values(
×
496
                "rekord_id"
497
            )
498
            ret = Q(pk__in=q)
×
499

500
        elif operation in UNION_OPS_ALL:
×
501
            q = Autorzy.objects.filter(jednostka=value).values("rekord_id")
×
502
            ret = Q(pk__in=q)
×
503

504
        else:
505
            raise UnknownOperation(operation)
×
506

507
        if operation in DIFFERENT_ALL:
×
508
            return ~ret
×
509
        return ret
×
510

511

512
class AktualnaJednostkaAutoraQueryObject(JednostkaQueryObject):
1✔
513
    label = "Aktualna jednostka dowolnego autora"
1✔
514
    type = AUTOCOMPLETE
1✔
515
    ops = [
1✔
516
        EQUAL_FEMALE,
517
        DIFFERENT_FEMALE,
518
        EQUAL_PLUS_SUB_FEMALE,
519
    ]
520
    model = Jednostka
1✔
521
    search_fields = ["nazwa"]
1✔
522
    field_name = "aktualna_jednostka"
1✔
523
    url = "bpp:jednostka-widoczna-autocomplete"
1✔
524

525
    def real_query(self, value, operation):
1✔
526
        if operation in EQUALITY_OPS_ALL:
×
527
            ret = Q(autorzy__autor__aktualna_jednostka=value)
×
528

529
        elif operation == EQUAL_PLUS_SUB_FEMALE:
×
530
            ret = Q(autorzy__autor__aktualna_jednostka__in=value.get_family())
×
531

532
        elif operation in EQUAL_PLUS_SUB_UNION_FEMALE:
×
533
            q = Autorzy.objects.filter(
×
534
                autor__aktualna_jednostka__in=value.get_family()
535
            ).values("rekord_id")
536
            ret = Q(pk__in=q)
×
537

538
        elif operation in UNION_OPS_ALL:
×
539
            q = Autorzy.objects.filter(autor__aktualna_jednostka=value).values(
×
540
                "rekord_id"
541
            )
542
            ret = Q(pk__in=q)
×
543

544
        else:
545
            raise UnknownOperation(operation)
×
546

547
        if operation in DIFFERENT_ALL:
×
548
            return ~ret
×
549
        return ret
×
550

551

552
class PierwszaJednostkaQueryObject(JednostkaQueryObject):
1✔
553
    ops = [
1✔
554
        EQUAL_FEMALE,
555
        DIFFERENT_FEMALE,
556
        EQUAL_PLUS_SUB_FEMALE,
557
        UNION_FEMALE,
558
        EQUAL_PLUS_SUB_UNION_FEMALE,
559
    ]
560
    label = "Pierwsza jednostka"
1✔
561
    field_name = "pierwsza_jednostka"
1✔
562

563
    def real_query(self, value, operation):
1✔
564
        if operation in EQUALITY_OPS_ALL:
×
565
            ret = Q(autorzy__jednostka=value, autorzy__kolejnosc=0)
×
566

567
        elif operation == EQUAL_PLUS_SUB_FEMALE:
×
568
            ret = Q(autorzy__jednostka__in=value.get_family(), autorzy__kolejnosc=0)
×
569

570
        elif operation in EQUAL_PLUS_SUB_UNION_FEMALE:
×
571
            q = Autorzy.objects.filter(
×
572
                jednostka__in=value.get_family(), kolejnosc=0
573
            ).values("rekord_id")
574
            ret = Q(pk__in=q)
×
575

576
        elif operation in UNION_OPS_ALL:
×
577
            q = Autorzy.objects.filter(jednostka=value, kolejnosc=0).values("rekord_id")
×
578
            ret = Q(pk__in=q)
×
579

580
        else:
581
            raise UnknownOperation(operation)
×
582

583
        if operation in DIFFERENT_ALL:
×
584
            return ~ret
×
585
        return ret
×
586

587

588
class WydzialQueryObject(
1✔
589
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
590
):
591
    label = "Wydział"
1✔
592
    type = AUTOCOMPLETE
1✔
593
    ops = [EQUAL, DIFFERENT, UNION]
1✔
594
    model = Wydzial
1✔
595
    search_fields = ["nazwa"]
1✔
596
    field_name = "wydzial"
1✔
597
    url = "bpp:public-wydzial-autocomplete"
1✔
598

599
    def real_query(self, value, operation):
1✔
600
        if operation in EQUALITY_OPS_ALL:
×
601
            ret = Q(autorzy__jednostka__wydzial=value)
×
602

603
        elif operation in UNION_OPS_ALL:
×
604
            q = Autorzy.objects.filter(jednostka__wydzial=value).values("rekord_id")
×
605
            ret = Q(pk__in=q)
×
606

607
        else:
608
            raise UnknownOperation(operation)
×
609

610
        if operation in DIFFERENT_ALL:
×
611
            return ~ret
×
612

613
        return ret
×
614

615

616
class PierwszyWydzialQueryObject(WydzialQueryObject):
1✔
617
    label = "Pierwszy wydział"
1✔
618
    field_name = "pierwszy_wydzial"
1✔
619

620
    def real_query(self, value, operation):
1✔
621
        if operation in EQUALITY_OPS_ALL:
×
622
            ret = Q(autorzy__jednostka__wydzial=value, autorzy__kolejnosc=0)
×
623

624
        elif operation in UNION_OPS_ALL:
×
625
            q = Autorzy.objects.filter(jednostka__wydzial=value, kolejnosc=0).values(
×
626
                "rekord_id"
627
            )
628
            ret = Q(pk__in=q)
×
629

630
        else:
631
            raise UnknownOperation(operation)
×
632

633
        if operation in DIFFERENT_ALL:
×
634
            return ~ret
×
635

636
        return ret
×
637

638

639
class Typ_OdpowiedzialnosciQueryObject(BppMultiseekVisibilityMixin, QueryObject):
1✔
640
    label = "Typ odpowiedzialności"
1✔
641
    type = VALUE_LIST
1✔
642
    values = Typ_Odpowiedzialnosci.objects.all()
1✔
643
    ops = [EQUAL, DIFFERENT, UNION]
1✔
644
    field_name = "typ_odpowiedzialnosci"
1✔
645
    public = False
1✔
646

647
    def value_from_web(self, value):
1✔
648
        return Typ_Odpowiedzialnosci.objects.get(nazwa=value)
×
649

650
    def real_query(self, value, operation):
1✔
651
        if operation in EQUALITY_OPS_ALL:
×
652
            ret = Q(autorzy__typ_odpowiedzialnosci=value)
×
653

654
        elif operation in UNION_OPS_ALL:
×
655
            q = Autorzy.objects.filter(typ_odpowiedzialnosci=value).values("rekord_id")
×
656
            ret = Q(pk__in=q)
×
657

658
        else:
659
            raise UnknownOperation(operation)
×
660

661
        if operation in DIFFERENT_ALL:
×
662
            return ~ret
×
663

664
        return ret
×
665

666

667
class ZakresLatQueryObject(BppMultiseekVisibilityMixin, RangeQueryObject):
1✔
668
    label = "Zakres lat"
1✔
669
    field_name = "rok"
1✔
670
    bpp_multiseek_visibility_field_name = "zakres_lat"
1✔
671

672

673
class JezykQueryObject(BppMultiseekVisibilityMixin, QueryObject):
1✔
674
    label = "Język"
1✔
675
    type = VALUE_LIST
1✔
676
    ops = EQUALITY_OPS_MALE
1✔
677
    values = Jezyk.objects.all()
1✔
678
    field_name = "jezyk"
1✔
679

680
    def value_from_web(self, value):
1✔
681
        return Jezyk.objects.get(nazwa=value)
×
682

683

684
class RokQueryObject(BppMultiseekVisibilityMixin, IntegerQueryObject):
1✔
685
    label = "Rok"
1✔
686
    field_name = "rok"
1✔
687

688

689
class ImpactQueryObject(BppMultiseekVisibilityMixin, DecimalQueryObject):
1✔
690
    label = "Impact factor"
1✔
691
    field_name = "impact_factor"
1✔
692

693

694
class LiczbaCytowanQueryObject(BppMultiseekVisibilityMixin, IntegerQueryObject):
1✔
695
    label = "Liczba cytowań"
1✔
696
    field_name = "liczba_cytowan"
1✔
697

698

699
class LiczbaAutorowQueryObject(BppMultiseekVisibilityMixin, IntegerQueryObject):
1✔
700
    label = "Liczba autorów"
1✔
701
    field_name = "liczba_autorow"
1✔
702

703

704
class PunktacjaWewnetrznaEnabledMixin:
1✔
705
    def option_enabled(self, request):
1✔
706
        return settings.UZYWAJ_PUNKTACJI_WEWNETRZNEJ
×
707

708

709
class PunktacjaWewnetrznaQueryObject(
1✔
710
    BppMultiseekVisibilityMixin, PunktacjaWewnetrznaEnabledMixin, DecimalQueryObject
711
):
712
    label = "Punktacja wewnętrzna"
1✔
713
    field_name = "punktacja_wewnetrzna"
1✔
714

715

716
class PunktacjaSNIP(BppMultiseekVisibilityMixin, DecimalQueryObject):
1✔
717
    label = "Punktacja SNIP"
1✔
718
    field_name = "punktacja_snip"
1✔
719

720

721
class PunktyKBNQueryObject(BppMultiseekVisibilityMixin, DecimalQueryObject):
1✔
722
    label = "Punkty MNiSW/MEiN"
1✔
723
    field_name = "punkty_kbn"
1✔
724

725

726
class IndexCopernicusQueryObject(BppMultiseekVisibilityMixin, DecimalQueryObject):
1✔
727
    label = "Index Copernicus"
1✔
728
    field_name = "index_copernicus"
1✔
729

730
    def option_enabled(self):
1✔
UNCOV
731
        u = Uczelnia.objects.get_default()
×
UNCOV
732
        if u is not None:
×
UNCOV
733
            return u.pokazuj_index_copernicus
×
UNCOV
734
        return True
×
735

736

737
class LiczbaZnakowWydawniczychQueryObject(
1✔
738
    BppMultiseekVisibilityMixin, IntegerQueryObject
739
):
740
    label = "Liczba znaków wydawniczych"
1✔
741
    field_name = "liczba_znakow_wydawniczych"
1✔
742

743

744
class TypRekorduObject(BppMultiseekVisibilityMixin, ValueListQueryObject):
1✔
745
    label = "Typ rekordu"
1✔
746
    field_name = "typ_rekordu"
1✔
747
    values = ["publikacje", "streszczenia", "inne"]
1✔
748
    ops = [EQUAL, DIFFERENT]
1✔
749

750
    def value_from_web(self, value):
1✔
751
        if value not in self.values:
×
752
            return
×
753
        return value
×
754

755
    def real_query(self, value, operation):
1✔
756
        if value == "publikacje":
×
757
            charaktery = Charakter_Formalny.objects.filter(publikacja=True)
×
758
        elif value == "streszczenia":
×
759
            charaktery = Charakter_Formalny.objects.filter(streszczenie=True)
×
760
        else:
761
            charaktery = (
×
762
                Charakter_Formalny.objects.all()
763
                .exclude(streszczenie=True)
764
                .exclude(publikacja=True)
765
            )
766

767
        q = Q(**{"charakter_formalny__in": charaktery})
×
768
        if operation == DIFFERENT:
×
769
            return ~q
×
770
        return q
×
771

772

773
class CharakterOgolnyQueryObject(BppMultiseekVisibilityMixin, ValueListQueryObject):
1✔
774
    label = "Charakter formalny ogólny"
1✔
775
    field_name = "charakter_formalny_ogolny"
1✔
776
    values = ["artykuł", "rozdział", "książka", "inne"]
1✔
777
    ops = [EQUAL, DIFFERENT]
1✔
778

779
    def value_from_web(self, value):
1✔
780
        if value not in self.values:
×
781
            return
×
782
        return value
×
783

784
    def real_query(self, value, operation):
1✔
785
        if value == "artykuł":
×
786
            charaktery = Charakter_Formalny.objects.filter(
×
787
                charakter_ogolny=const.CHARAKTER_OGOLNY_ARTYKUL
788
            )
789
        elif value == "rozdział":
×
790
            charaktery = Charakter_Formalny.objects.filter(
×
791
                charakter_ogolny=const.CHARAKTER_OGOLNY_ROZDZIAL
792
            )
793
        elif value == "książka":
×
794
            charaktery = Charakter_Formalny.objects.filter(
×
795
                charakter_ogolny=const.CHARAKTER_OGOLNY_KSIAZKA
796
            )
797
        elif value == "inne":
×
798
            charaktery = Charakter_Formalny.objects.filter(
×
799
                charakter_ogolny=const.CHARAKTER_OGOLNY_INNE
800
            )
801
        else:
802
            raise NotImplementedError()
×
803

804
        q = Q(**{"charakter_formalny__in": charaktery})
×
805
        if operation == DIFFERENT:
×
806
            return ~q
×
807
        return q
×
808

809

810
class CharakterFormalnyQueryObject(
1✔
811
    BppMultiseekVisibilityMixin, TreeNodeChoiceFieldMixin, ValueListQueryObject
812
):
813
    field_name = "charakter_formalny"
1✔
814
    label = "Charakter formalny"
1✔
815

816
    start_level = 0
1✔
817

818
    def _values(self):
1✔
UNCOV
819
        for elem in self.queryset:
×
UNCOV
820
            yield self.label_from_instance(elem)
×
821

822
    values = property(_values)
1✔
823

824
    def value_from_web(self, value):
1✔
825
        if value is None:
×
826
            return None
×
827
        return Charakter_Formalny.objects.get(nazwa=value.lstrip("-").lstrip(" "))
×
828

829
    def __init__(self, *args, **kwargs):
1✔
830
        ValueListQueryObject.__init__(self, *args, **kwargs)
1✔
831

832
        self.level_indicator = kwargs.pop("level_indicator", DEFAULT_LEVEL_INDICATOR)
1✔
833

834
    @property
1✔
835
    def queryset(self):
1✔
UNCOV
836
        queryset = Charakter_Formalny.objects.all()
×
837
        # if a queryset is supplied, enforce ordering
UNCOV
838
        if hasattr(queryset, "model"):
×
UNCOV
839
            mptt_opts = queryset.model._mptt_meta
×
UNCOV
840
            queryset = queryset.order_by(mptt_opts.tree_id_attr, mptt_opts.left_attr)
×
UNCOV
841
        return queryset
×
842
        # self.queryset = queryset
843

844
    def real_query(self, value, operation, validate_operation=True):
1✔
845
        ret = None
×
846

847
        if operation in [str(x) for x in EQUALITY_OPS_ALL]:
×
848
            ret = Q(
×
849
                **{self.field_name + "__in": value.get_descendants(include_self=True)}
850
            )
851

852
        else:
853
            if validate_operation:
×
854
                raise UnknownOperation(operation)
×
855

856
        if operation in DIFFERENT_ALL:
×
857
            return ~ret
×
858

859
        return ret
×
860

861

862
class OpenaccessWersjaTekstuQueryObject(
1✔
863
    BppMultiseekVisibilityMixin, ValueListQueryObject
864
):
865
    field_name = "openaccess_wersja_tekstu"
1✔
866
    values = Wersja_Tekstu_OpenAccess.objects.all()
1✔
867
    label = "OpenAccess: wersja tekstu"
1✔
868

869
    def value_from_web(self, value):
1✔
870
        return Wersja_Tekstu_OpenAccess.objects.get(nazwa=value)
×
871

872

873
class OpenaccessLicencjaQueryObject(BppMultiseekVisibilityMixin, ValueListQueryObject):
1✔
874
    field_name = "openaccess_licencja"
1✔
875
    values = Licencja_OpenAccess.objects.all()
1✔
876
    label = "OpenAccess: licencja"
1✔
877

878
    def value_from_web(self, value):
1✔
879
        return Licencja_OpenAccess.objects.get(nazwa=value)
×
880

881

882
class OpenaccessCzasPublikacjiQueryObject(
1✔
883
    BppMultiseekVisibilityMixin, ValueListQueryObject
884
):
885
    field_name = "openaccess_czas_publikacji"
1✔
886
    values = Czas_Udostepnienia_OpenAccess.objects.all()
1✔
887
    label = "OpenAccess: czas udostępnienia"
1✔
888

889
    def value_from_web(self, value):
1✔
890
        return Czas_Udostepnienia_OpenAccess.objects.get(nazwa=value)
×
891

892

893
class TypKBNQueryObject(BppMultiseekVisibilityMixin, ValueListQueryObject):
1✔
894
    field_name = "typ_kbn"
1✔
895
    values = Typ_KBN.objects.all()
1✔
896
    label = "Typ MNiSW/MEiN"
1✔
897

898
    def value_from_web(self, value):
1✔
899
        return Typ_KBN.objects.get(nazwa=value)
×
900

901

902
class ZrodloQueryObject(BppMultiseekVisibilityMixin, AutocompleteQueryObject):
1✔
903
    label = "Źródło"
1✔
904
    ops = EQUALITY_OPS_NONE
1✔
905
    model = Zrodlo
1✔
906
    field_name = "zrodlo"
1✔
907
    url = "bpp:zrodlo-autocomplete"
1✔
908

909

910
class RecenzowanaQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
911
    ops = EQUALITY_OPS_NONE
1✔
912
    field_name = "recenzowana"
1✔
913
    label = "Praca recenzowana"
1✔
914

915

916
class BazaWOS(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
917
    ops = EQUALITY_OPS_NONE
1✔
918
    field_name = "konferencja__baza_wos"
1✔
919
    label = "Konferencja w bazie Web of Science"
1✔
920

921

922
class BazaSCOPUS(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
923
    ops = EQUALITY_OPS_NONE
1✔
924
    field_name = "konferencja__baza_scopus"
1✔
925
    label = "Konferencja w bazie Scopus"
1✔
926

927

928
class RodzajKonferenckjiQueryObject(BppMultiseekVisibilityMixin, ValueListQueryObject):
1✔
929
    label = "Rodzaj konferencji"
1✔
930
    field_name = "rodzaj_konferencji"
1✔
931
    values = ["krajowa", "międzynarodowa", "lokalna"]
1✔
932

933
    def value_from_web(self, value):
1✔
934
        if value not in self.values:
×
935
            return
×
936
        return value
×
937

938
    def real_query(self, value, operation):
1✔
939
        if value == "krajowa":
×
940
            tk = Konferencja.TK_KRAJOWA
×
941
        elif value == "międzynarodowa":
×
942
            tk = Konferencja.TK_MIEDZYNARODOWA
×
943
        else:
944
            tk = Konferencja.TK_LOKALNA
×
945

946
        q = Q(**{"konferencja__typ_konferencji": tk})
×
947
        if operation == DIFFERENT:
×
948
            return ~q
×
949
        return q
×
950

951

952
class RodzajJednostkiQueryObject(BppMultiseekVisibilityMixin, ValueListQueryObject):
1✔
953
    label = "Rodzaj jednostki"
1✔
954
    field_name = "rodzaj_jednostki"
1✔
955
    values = Jednostka.RODZAJ_JEDNOSTKI.labels
1✔
956

957
    def value_from_web(self, value):
1✔
958
        if value not in self.values:
×
959
            return
×
960
        return value
×
961

962
    def real_query(self, value, operation):
1✔
963
        if value == Jednostka.RODZAJ_JEDNOSTKI.NORMALNA.label:
×
964
            tk = Jednostka.RODZAJ_JEDNOSTKI.NORMALNA.value
×
965
        else:
966
            tk = Jednostka.RODZAJ_JEDNOSTKI.KOLO_NAUKOWE.value
×
967

968
        q = Q(**{"autorzy__jednostka__rodzaj_jednostki": tk})
×
969
        if operation == DIFFERENT:
×
970
            return ~q
×
971
        return q
×
972

973

974
class ObcaJednostkaQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
975
    label = "Obca jednostka"
1✔
976
    field_name = "obca_jednostka"
1✔
977
    ops = EQUALITY_OPS_FEMALE
1✔
978
    public = False
1✔
979

980
    def real_query(self, value, operation):
1✔
981
        value = not value
×
982

983
        if operation in EQUALITY_OPS_ALL:
×
984
            ret = Q(autorzy__jednostka__skupia_pracownikow=value)
×
985
        else:
986
            raise UnknownOperation(operation)
×
987

988
        if operation in DIFFERENT_ALL:
×
989
            return ~ret
×
990

991
        return ret
×
992

993

994
class AfiliujeQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
995
    label = "Afiliuje"
1✔
996
    field_name = "afiliuje"
1✔
997
    ops = [
1✔
998
        EQUAL,
999
    ]
1000
    public = False
1✔
1001

1002
    def real_query(self, value, operation):
1✔
1003
        if operation in EQUALITY_OPS_ALL:
×
1004
            ret = Q(autorzy__afiliuje=value)
×
1005
        else:
1006
            raise UnknownOperation(operation)
×
1007

1008
        if operation in DIFFERENT_ALL:
×
1009
            return ~ret
×
1010

1011
        return ret
×
1012

1013

1014
class DyscyplinaUstawionaQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
1015
    label = "Dyscyplina ustawiona"
1✔
1016
    field_name = "dyscyplina_ustawiona"
1✔
1017
    ops = EQUALITY_OPS_FEMALE
1✔
1018
    public = False
1✔
1019

1020
    def real_query(self, value, operation):
1✔
1021
        if operation in EQUALITY_OPS_ALL:
×
1022
            if value:
×
1023
                ret = ~Q(autorzy__dyscyplina_naukowa=None)
×
1024
            else:
1025
                ret = Q(autorzy__dyscyplina_naukowa=None)
×
1026
        else:
1027
            raise UnknownOperation(operation)
×
1028

1029
        if operation in DIFFERENT_ALL:
×
1030
            return ~ret
×
1031

1032
        return ret
×
1033

1034

1035
class StronaWWWUstawionaQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
1036
    label = "Strona WWW ustawiona"
1✔
1037
    field_name = "www_ustawiona"
1✔
1038
    ops = [
1✔
1039
        EQUAL_FEMALE,
1040
    ]
1041
    public = False
1✔
1042

1043
    def real_query(self, value, operation):
1✔
1044
        if value:
×
1045
            ret = Q(
×
1046
                Q(~Q(public_www="") & Q(public_www__isnull=False))
1047
                | Q(~Q(www="") & Q(www__isnull=False))
1048
            )
1049
        else:
1050
            ret = Q(
×
1051
                Q(Q(public_www="") | Q(public_www__isnull=True))
1052
                & Q(Q(www="") | Q(www__isnull=True))
1053
            )
1054

1055
        return ret
×
1056

1057

1058
class LicencjaOpenAccessUstawionaQueryObject(
1✔
1059
    BppMultiseekVisibilityMixin, BooleanQueryObject
1060
):
1061
    label = "OpenAccess: licencja ustawiona"
1✔
1062
    field_name = "lo_ustawiona"
1✔
1063
    ops = EQUALITY_OPS_FEMALE
1✔
1064
    public = False
1✔
1065

1066
    def real_query(self, value, operation):
1✔
1067
        if operation in EQUALITY_OPS_ALL:
×
1068
            if value:
×
1069
                ret = Q(openaccess_licencja__isnull=False)
×
1070
            else:
1071
                ret = Q(openaccess_licencja__isnull=True)
×
1072
        else:
1073
            raise UnknownOperation(operation)
×
1074

1075
        if operation in DIFFERENT_ALL:
×
1076
            return ~ret
×
1077

1078
        return ret
×
1079

1080

1081
class PublicDostepDniaQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
1082
    label = "Dostęp dnia ustawiony"
1✔
1083
    field_name = "public_dostep_dnia"
1✔
1084
    public = False
1✔
1085

1086
    def real_query(self, value, operation):
1✔
1087
        if operation in EQUALITY_OPS_ALL:
×
1088
            if value:
×
1089
                ret = ~Q(public_dostep_dnia=None)
×
1090
            else:
1091
                ret = Q(public_dostep_dnia=None)
×
1092
        else:
1093
            raise UnknownOperation(operation)
×
1094

1095
        if operation in DIFFERENT_ALL:
×
1096
            return ~ret
×
1097

1098
        return ret
×
1099

1100

1101
class KierunekStudiowQueryObject(
1✔
1102
    BppMultiseekVisibilityMixin, ForeignKeyDescribeMixin, AutocompleteQueryObject
1103
):
1104
    label = "Kierunek studiów"
1✔
1105
    type = AUTOCOMPLETE
1✔
1106
    ops = [
1✔
1107
        EQUAL,
1108
        DIFFERENT,
1109
        UNION,
1110
    ]
1111
    model = Kierunek_Studiow
1✔
1112
    search_fields = ["nazwa"]
1✔
1113
    field_name = "kierunek_studiow"
1✔
1114
    url = "bpp:kierunek-studiow-autocomplete"
1✔
1115

1116
    def real_query(self, value, operation):
1✔
1117
        if operation in EQUALITY_OPS_ALL:
×
1118
            ret = Q(autorzy__kierunek_studiow=value)
×
1119

1120
        elif operation in UNION_OPS_ALL:
×
1121
            q = Autorzy.objects.filter(kierunek_studiow=value).values("rekord_id")
×
1122
            ret = Q(pk__in=q)
×
1123

1124
        else:
1125
            raise UnknownOperation(operation)
×
1126

1127
        if operation in DIFFERENT_ALL:
×
1128
            return ~ret
×
1129
        return ret
×
1130

1131

1132
class OswiadczenieKENQueryObject(BppMultiseekVisibilityMixin, BooleanQueryObject):
1✔
1133
    label = "Oświadczenie KEN"
1✔
1134
    ops = [
1✔
1135
        EQUAL,
1136
        DIFFERENT,
1137
        UNION,
1138
    ]
1139
    field_name = "oswiadczenie_ken"
1✔
1140

1141
    def real_query(self, value, operation):
1✔
1142
        if operation in EQUALITY_OPS_ALL:
×
1143
            ret = Q(autorzy__oswiadczenie_ken=value)
×
1144

1145
        elif operation in UNION_OPS_ALL:
×
1146
            q = Autorzy.objects.filter(oswiadczenie_ken=value).values("rekord_id")
×
1147
            ret = Q(pk__in=q)
×
1148

1149
        else:
1150
            raise UnknownOperation(operation)
×
1151

1152
        if operation in DIFFERENT_ALL:
×
1153
            return ~ret
×
1154
        return ret
×
1155

1156
    def enabled(self, request=None):
1✔
UNCOV
1157
        if getattr(settings, "BPP_POKAZUJ_OSWIADCZENIE_KEN", False):
×
1158
            return super().enabled(request)
×
UNCOV
1159
        return False
×
1160

1161

1162
multiseek_fields = [
1✔
1163
    TytulPracyQueryObject(),
1164
    NazwiskoIImieQueryObject(),
1165
    JednostkaQueryObject(),
1166
    WydzialQueryObject(),
1167
    Typ_OdpowiedzialnosciQueryObject(),
1168
    TypOgolnyAutorQueryObject(),
1169
    TypOgolnyRedaktorQueryObject(),
1170
    TypOgolnyTlumaczQueryObject(),
1171
    TypOgolnyRecenzentQueryObject(),
1172
    ZakresLatQueryObject(),
1173
    JezykQueryObject(),
1174
    RokQueryObject(),
1175
    TypRekorduObject(),
1176
    CharakterFormalnyQueryObject(),
1177
    CharakterOgolnyQueryObject(),
1178
    TypKBNQueryObject(),
1179
    ZrodloQueryObject(),
1180
    WydawnictwoNadrzedneQueryObject(),
1181
    PierwszeNazwiskoIImie(),
1182
    PierwszaJednostkaQueryObject(),
1183
    PierwszyWydzialQueryObject(),
1184
    NazwiskoIImie1do3(),
1185
    NazwiskoIImie1do5(),
1186
    OstatnieNazwiskoIImie(),
1187
    ORCIDQueryObject(),
1188
    ImpactQueryObject(),
1189
    LiczbaCytowanQueryObject(),
1190
    LiczbaAutorowQueryObject(),
1191
    PunktyKBNQueryObject(),
1192
    IndexCopernicusQueryObject(),
1193
    PunktacjaSNIP(),
1194
    PunktacjaWewnetrznaQueryObject(),
1195
    InformacjeQueryObject(),
1196
    SzczegolyQueryObject(),
1197
    UwagiQueryObject(),
1198
    SlowaKluczoweQueryObject(),
1199
    AdnotacjeQueryObject(),
1200
    DataUtworzeniaQueryObject(),
1201
    OstatnioZmieniony(),
1202
    RecenzowanaQueryObject(),
1203
    LiczbaZnakowWydawniczychQueryObject(),
1204
    NazwaKonferencji(),
1205
    RodzajKonferenckjiQueryObject(),
1206
    BazaWOS(),
1207
    BazaSCOPUS(),
1208
    OpenaccessWersjaTekstuQueryObject(),
1209
    OpenaccessLicencjaQueryObject(),
1210
    OpenaccessCzasPublikacjiQueryObject(),
1211
    DyscyplinaQueryObject(),
1212
    ZewnetrznaBazaDanychQueryObject(),
1213
    ObcaJednostkaQueryObject(),
1214
    AfiliujeQueryObject(),
1215
    DyscyplinaUstawionaQueryObject(),
1216
    LicencjaOpenAccessUstawionaQueryObject(),
1217
    PublicDostepDniaQueryObject(),
1218
    StronaWWWUstawionaQueryObject(),
1219
    DOIQueryObject(),
1220
    AktualnaJednostkaAutoraQueryObject(),
1221
    RodzajJednostkiQueryObject(),
1222
    KierunekStudiowQueryObject(),
1223
    OswiadczenieKENQueryObject(),
1224
    StatusKorektyQueryObject(),
1225
]
1226

1227

1228
class PunktacjaWewnetrznaReportType(PunktacjaWewnetrznaEnabledMixin, ReportType):
1✔
1229
    pass
1✔
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