Skip to content

Commit f3def1e

Browse files
committed
wip?
1 parent d6f9a63 commit f3def1e

File tree

6 files changed

+45
-66
lines changed

6 files changed

+45
-66
lines changed

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,4 @@ xmltodict==0.12.0 # MIT
4343
# Allows custom-rendered IDs, hiding null values, and including data in error responses
4444
git+https://github.com/cos-forks/[email protected]+cos0
4545

46-
git+https://github.com/aaxelb/[email protected].13
46+
git+https://github.com/aaxelb/[email protected].14

trove/trovesearch/page_cursor.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,15 @@ class OffsetCursor(PageCursor):
8383
start_offset: int = 0
8484

8585
def is_valid(self) -> bool:
86+
_end_offset = (
87+
self.total_count
88+
if self.bounded_page_size == self.page_size
89+
else min(self.total_count, self.page_size)
90+
)
8691
return (
8792
super().is_valid()
8893
and 0 <= self.start_offset <= MAX_OFFSET
89-
and self.start_offset < self.total_count
94+
and self.start_offset < _end_offset
9095
)
9196

9297
def is_first_page(self) -> bool:

trove/trovesearch/search_handle.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,8 @@ def total_result_count(self) -> primitive_rdf.Literal:
2727
else self.cursor.total_count
2828
)
2929

30-
def get_next_streaming_handle(self):
31-
_next_params = self.search_params.get_next_streaming_params()
32-
return (
33-
self.handler(_next_params)
34-
if (_next_params is not None) and (self.handler is not None)
35-
else None
36-
)
30+
def get_next_streaming_handle(self) -> typing.Self | None:
31+
raise NotImplementedError
3732

3833

3934
@dataclasses.dataclass
@@ -64,6 +59,18 @@ def __post_init__(self):
6459
_cursor.first_page_ids = [_result.card_id for _result in _page]
6560
return _page
6661

62+
def get_next_streaming_handle(self) -> typing.Self | None:
63+
_next_cursor = self.cursor.next_cursor()
64+
if (_next_cursor is not None) and (self.handler is not None):
65+
_next_params = dataclasses.replace(
66+
self.search_params,
67+
page_cursor=_next_cursor,
68+
include=frozenset([(TROVE.searchResultPage,)]),
69+
)
70+
if self.handler is not None:
71+
return self.handler(_next_params)
72+
return None
73+
6774

6875
@dataclasses.dataclass
6976
class ValuesearchHandle(BasicSearchHandle):

trove/trovesearch/search_params.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,6 @@ def _gather_include(cls, queryparams: QueryparamDict):
172172
for _, _include_value in queryparams.get('include', [])
173173
)
174174

175-
def get_next_streaming_params(self) -> typing.Self | None:
176-
return None
177-
178175

179176
@dataclasses.dataclass(frozen=True)
180177
class Textsegment:
@@ -558,20 +555,6 @@ def to_querydict(self) -> QueryDict:
558555
_querydict['indexStrategy'] = self.index_strategy_name
559556
return _querydict
560557

561-
def get_next_streaming_params(self) -> typing.Self | None:
562-
_next_diff = self._streaming_next_diff_kwargs()
563-
return (
564-
None
565-
if _next_diff.get('cursor') is None
566-
else dataclasses.replace(self, **_next_diff)
567-
)
568-
569-
def _streaming_next_diff_kwargs(self) -> dict:
570-
return {
571-
'cursor': self.page_cursor.next_cursor(),
572-
'include': frozenset([(TROVE.searchResultPage,)]),
573-
}
574-
575558

576559
@dataclasses.dataclass(frozen=True)
577560
class ValuesearchParams(CardsearchParams):

trove/trovesearch/trovesearch_gathering.py

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import dataclasses
22
import logging
33
import urllib.parse
4+
from typing import ClassVar
45

56
from primitive_metadata.primitive_rdf import (
67
Literal,
@@ -72,55 +73,38 @@
7273

7374

7475
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)
7778

7879
@classmethod
79-
def new(cls, *args, type_iris=(), **kwargs):
80+
def new(cls, *, type_iris=(), **kwargs):
8081
return super().new(
81-
*args,
8282
# add type_iri to new Focus instance
8383
type_iris={
84-
cls.TYPE_IRI
84+
cls.TYPE_IRI,
8585
*getattr(cls, 'ADDITIONAL_TYPE_IRIS', ()),
8686
*type_iris
8787
},
8888
**kwargs,
8989
)
9090

9191

92+
@dataclasses.dataclass(frozen=True)
9293
class CardsearchFocus(_TypedFocus):
9394
TYPE_IRI = TROVE.Cardsearch
9495

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)
10799

108100

101+
@dataclasses.dataclass(frozen=True)
109102
class ValuesearchFocus(_TypedFocus):
110103
TYPE_IRI = TROVE.Valuesearch
111104

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)
124108

125109

126110
class IndexcardFocus(_TypedFocus):
@@ -347,7 +331,6 @@ def _load_card_descriptions_derived(card_iris, deriver_iri: str) -> dict[str, rd
347331
)
348332
.select_related('upriver_indexcard')
349333
.prefetch_related('upriver_indexcard__focus_identifier_set')
350-
.get()
351334
)
352335
_by_card_iri = {}
353336
for _derived in _derived_indexcard_qs:

trove/views/search.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,13 @@ def get(self, request):
5454
_search_params = self._parse_search_params(request)
5555
_specific_index = index_strategy.get_index_for_trovesearch(_search_params)
5656
_focus = self.focus_type.new(
57-
_url,
58-
self.focus_type.TYPE_IRI,
57+
iris=_url,
5958
search_params=_search_params,
6059
search_handle=self.get_search_handle(_specific_index, _search_params),
6160
)
6261
if _renderer_type.PASSIVE_RENDER:
6362
# fill the gathering's cache with requested info
64-
self._gather_as_requested(_search_gathering, _focus)
63+
_search_gathering.ask(_search_params.include, focus=_focus)
6564
# take gathered data into a response
6665
_renderer = _renderer_type(_focus, _search_gathering)
6766
return make_http_response(
@@ -86,20 +85,22 @@ def _start_gathering(self, renderer_type) -> gather.Gathering:
8685
})
8786

8887
def get_search_handle(self, specific_index, search_params) -> BasicSearchHandle:
89-
_handler = self.get_search_handler(specific_index)
90-
_handle = _handler(search_params)
91-
_handle.handler = _handler
92-
return _handle
88+
return self._get_wrapped_handler(specific_index)(search_params)
9389

9490
def get_search_handler(
9591
self,
9692
specific_index: index_strategy.IndexStrategy.SpecificIndex,
9793
) -> _TrovesearchHandler:
9894
raise NotImplementedError
9995

100-
def _gather_as_requested(self, gathering, focus) -> None:
101-
_search_params: BaseTroveParams = gathering.gatherer_kwargs['search_params']
102-
gathering.ask(_search_params.include)
96+
def _get_wrapped_handler(self, specific_index):
97+
_raw_handler = self.get_search_handler(specific_index)
98+
99+
def _wrapped_handler(search_params):
100+
_handle = _raw_handler(search_params)
101+
_handle.handler = _wrapped_handler
102+
return _handle
103+
return _wrapped_handler
103104

104105

105106
class CardsearchView(_BaseTrovesearchView):

0 commit comments

Comments
 (0)