Source code for redditwarp.pagination.async_paginator
from __future__ import annotations
from typing import TypeVar, Sequence, Generic, AsyncIterator, Optional
T = TypeVar('T')
# Abstract classes
[docs]class AsyncPaginator(Generic[T]):
def __init__(self, *, limit: Optional[int] = None) -> None:
self.limit: Optional[int] = limit
("")
async def __aiter__(self) -> AsyncIterator[Sequence[T]]:
while page := await self.fetch():
yield page
[docs]class OffsetAsyncPaginator(AsyncPaginator[T]):
def __init__(self, *, limit: Optional[int] = None, offset: Optional[int] = None) -> None:
super().__init__(limit=limit)
self.offset: Optional[int] = offset
("")
# Interfaces
# Mixins
[docs]class HasMoreAsyncPaginator(HasMore, AsyncPaginator[T]):
async def __aiter__(self) -> AsyncIterator[Sequence[T]]:
if page := await self.fetch():
yield page
while self.has_more() and (page := await self.fetch()):
yield page