Skip to content

Commit 56a7d1e

Browse files
committed
create scroll_events_metadata
1 parent 31a56b5 commit 56a7d1e

2 files changed

Lines changed: 82 additions & 6 deletions

File tree

src/flareio/api_client.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ def scroll(
284284
if json and from_in_json:
285285
json["from"] = next_page
286286

287-
def scroll_events(
287+
def _scroll_events_metadata(
288288
self,
289289
*,
290290
method: t.Literal[
@@ -299,6 +299,7 @@ def scroll_events(
299299
_events_limiter: t.Optional[_Limiter] = None,
300300
) -> t.Iterator[
301301
t.Tuple[
302+
dict,
302303
dict,
303304
t.Optional[str],
304305
],
@@ -321,8 +322,8 @@ def scroll_events(
321322
page_items: t.List[dict] = page_resp.json()["items"]
322323
page_next: t.Optional[str] = page_resp.json()["next"]
323324

324-
for page_item in page_items:
325-
event_uid: str = page_item["metadata"]["uid"]
325+
for event_metadata in page_items:
326+
event_uid: str = event_metadata["metadata"]["uid"]
326327

327328
events_limiter.tick()
328329
event_resp: requests.Response = self.get(
@@ -334,6 +335,36 @@ def scroll_events(
334335
event_resp.raise_for_status()
335336
event: dict = event_resp.json()
336337

337-
yield event, page_next
338+
yield event_metadata, event, page_next
338339

339340
pages_limiter.tick()
341+
342+
def scroll_events(
343+
self,
344+
*,
345+
method: t.Literal[
346+
"GET",
347+
"POST",
348+
],
349+
pages_url: str,
350+
events_url: str,
351+
params: t.Optional[t.Dict[str, t.Any]] = None,
352+
json: t.Optional[t.Dict[str, t.Any]] = None,
353+
_pages_limiter: t.Optional[_Limiter] = None,
354+
_events_limiter: t.Optional[_Limiter] = None,
355+
) -> t.Iterator[
356+
t.Tuple[
357+
dict,
358+
t.Optional[str],
359+
],
360+
]:
361+
for _, event, page_next in self._scroll_events_metadata(
362+
method=method,
363+
pages_url=pages_url,
364+
events_url=events_url,
365+
params=params,
366+
json=json,
367+
_pages_limiter=_pages_limiter,
368+
_events_limiter=_events_limiter,
369+
):
370+
yield event, page_next

tests/test_api_client_scroll_events.py

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ def test_scroll_events() -> None:
4545
status_code=200,
4646
)
4747

48-
item, cursor = next(events_iterator)
48+
event, cursor = next(events_iterator)
4949
assert len(mocker.request_history) == 2
50-
assert item == {"event": "hello"}
50+
assert event == {"event": "hello"}
5151
assert cursor == "second_page"
5252

5353
# Last page
@@ -63,3 +63,48 @@ def test_scroll_events() -> None:
6363
with pytest.raises(StopIteration):
6464
next(events_iterator)
6565
assert len(mocker.request_history) == 1
66+
67+
68+
def test_scroll_events_metadata() -> None:
69+
"""
70+
scroll_events_metadata is used by the flareio-cli
71+
"""
72+
api_client = get_test_client()
73+
no_limit: _Limiter = _Limiter._unlimited()
74+
75+
events_iterator = api_client._scroll_events_metadata(
76+
method="GET",
77+
pages_url="https://api.flare.io/pages",
78+
events_url="https://api.flare.io/events",
79+
params={
80+
"from": None,
81+
},
82+
_pages_limiter=no_limit,
83+
_events_limiter=no_limit,
84+
)
85+
86+
# First page
87+
with requests_mock.Mocker() as mocker:
88+
mocker.register_uri(
89+
"GET",
90+
"https://api.flare.io/pages",
91+
json={
92+
"items": [
93+
{"metadata": {"uid": "first_event_uid"}},
94+
],
95+
"next": "second_page",
96+
},
97+
status_code=200,
98+
)
99+
mocker.register_uri(
100+
"GET",
101+
"https://api.flare.io/events",
102+
json={"event": "hello"},
103+
status_code=200,
104+
)
105+
106+
event_metadata, event, cursor = next(events_iterator)
107+
assert len(mocker.request_history) == 2
108+
assert event_metadata == {"metadata": {"uid": "first_event_uid"}}
109+
assert event == {"event": "hello"}
110+
assert cursor == "second_page"

0 commit comments

Comments
 (0)