Spaces:
Build error
Build error
import base64 | |
from typing import AsyncIterator, Callable | |
def offset_to_page_id(offset: int, has_next: bool) -> str | None: | |
if not has_next: | |
return None | |
next_page_id = base64.b64encode(str(offset).encode()).decode() | |
return next_page_id | |
def page_id_to_offset(page_id: str | None) -> int: | |
if not page_id: | |
return 0 | |
offset = int(base64.b64decode(page_id).decode()) | |
return offset | |
async def iterate(fn: Callable, **kwargs) -> AsyncIterator: | |
"""Iterate over paged result sets. Assumes that the results sets contain an array of result objects, and a next_page_id""" | |
kwargs = {**kwargs} | |
kwargs['page_id'] = None | |
while True: | |
result_set = await fn(**kwargs) | |
for result in result_set.results: | |
yield result | |
if result_set.next_page_id is None: | |
return | |
kwargs['page_id'] = result_set.next_page_id | |