Skip to content

Commit ff0f7a6

Browse files
author
manas-shinde
committed
feat : Added new generator - paginated_api_reader.
1 parent 18cf4bf commit ff0f7a6

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

generators/paginated_api_reader.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
def paginated_api_reader(fetch_page_func, start=1):
2+
"""
3+
Yields items from a paginated API.
4+
5+
`fetch_page_func(page_number)`: should return (items: list, has_more: bool)
6+
"""
7+
page = start
8+
while True:
9+
items, has_more = fetch_page_func(page)
10+
for item in items:
11+
yield item
12+
if not has_more:
13+
break
14+
page += 1

tests/test_paginated_api_reader.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from generators.paginated_api_reader import paginated_api_reader
2+
3+
4+
def mock_api(page):
5+
if page > 3:
6+
return [], False
7+
return [f"item-{page}-{i}" for i in range(2)], True
8+
9+
10+
def test_paginated_api_reader():
11+
items = list(paginated_api_reader(mock_api))
12+
assert len(items) == 6
13+
assert items[0] == "item-1-0"
14+
assert items[-1] == "item-3-1"

0 commit comments

Comments
 (0)