|
1 | 1 | import dataclasses |
2 | 2 | import logging |
3 | 3 | import urllib.parse |
| 4 | +from typing import ClassVar |
4 | 5 |
|
5 | 6 | from primitive_metadata.primitive_rdf import ( |
6 | 7 | Literal, |
|
72 | 73 |
|
73 | 74 |
|
74 | 75 | class _TypedFocus(gather.Focus): |
75 | | - # TYPE_IRI: str (expected on subclasses) |
76 | | - # ADDITIONAL_TYPE_IRIS: Iterable[str] (optional on subclasses) |
| 76 | + TYPE_IRI: ClassVar[str] # (expected on subclasses) |
| 77 | + ADDITIONAL_TYPE_IRIS: ClassVar[tuple[str, ...]] = () # (optional on subclasses) |
77 | 78 |
|
78 | 79 | @classmethod |
79 | | - def new(cls, *args, type_iris=(), **kwargs): |
| 80 | + def new(cls, *, type_iris=(), **kwargs): |
80 | 81 | return super().new( |
81 | | - *args, |
82 | 82 | # add type_iri to new Focus instance |
83 | 83 | type_iris={ |
84 | | - cls.TYPE_IRI |
| 84 | + cls.TYPE_IRI, |
85 | 85 | *getattr(cls, 'ADDITIONAL_TYPE_IRIS', ()), |
86 | 86 | *type_iris |
87 | 87 | }, |
88 | 88 | **kwargs, |
89 | 89 | ) |
90 | 90 |
|
91 | 91 |
|
| 92 | +@dataclasses.dataclass(frozen=True) |
92 | 93 | class CardsearchFocus(_TypedFocus): |
93 | 94 | TYPE_IRI = TROVE.Cardsearch |
94 | 95 |
|
95 | | - # additional namedtuple fields |
96 | | - search_params: CardsearchParams |
97 | | - search_handle: CardsearchHandle |
98 | | - |
99 | | - @classmethod |
100 | | - def new(cls, *args, search_params, search_handle, **kwargs): |
101 | | - _base = super().new(*args, **kwargs) |
102 | | - return cls( |
103 | | - *_base, |
104 | | - search_params=search_params, |
105 | | - search_handle=search_handle, |
106 | | - ) |
| 96 | + # additional dataclass fields |
| 97 | + search_params: CardsearchParams = dataclasses.field(compare=False) |
| 98 | + search_handle: CardsearchHandle = dataclasses.field(compare=False) |
107 | 99 |
|
108 | 100 |
|
| 101 | +@dataclasses.dataclass(frozen=True) |
109 | 102 | class ValuesearchFocus(_TypedFocus): |
110 | 103 | TYPE_IRI = TROVE.Valuesearch |
111 | 104 |
|
112 | | - # additional namedtuple fields |
113 | | - search_params: ValuesearchParams |
114 | | - search_handle: ValuesearchHandle |
115 | | - |
116 | | - @classmethod |
117 | | - def new(cls, *args, search_params, search_handle, **kwargs): |
118 | | - _base = super().new(*args, **kwargs) |
119 | | - return cls( |
120 | | - *_base, |
121 | | - search_params=search_params, |
122 | | - search_handle=search_handle, |
123 | | - ) |
| 105 | + # additional dataclass fields |
| 106 | + search_params: ValuesearchParams = dataclasses.field(compare=False) |
| 107 | + search_handle: ValuesearchHandle = dataclasses.field(compare=False) |
124 | 108 |
|
125 | 109 |
|
126 | 110 | class IndexcardFocus(_TypedFocus): |
@@ -347,7 +331,6 @@ def _load_card_descriptions_derived(card_iris, deriver_iri: str) -> dict[str, rd |
347 | 331 | ) |
348 | 332 | .select_related('upriver_indexcard') |
349 | 333 | .prefetch_related('upriver_indexcard__focus_identifier_set') |
350 | | - .get() |
351 | 334 | ) |
352 | 335 | _by_card_iri = {} |
353 | 336 | for _derived in _derived_indexcard_qs: |
|
0 commit comments