Files
e2b-dev--e2b/packages/python-sdk/e2b/paginator.py
T
2026-07-13 12:47:58 +08:00

53 lines
1.5 KiB
Python

from typing import Generic, Mapping, Optional, TypeVar
from typing_extensions import Unpack
from e2b.connection_config import ApiParams
T = TypeVar("T")
OptsT = TypeVar("OptsT", bound=ApiParams)
class PaginatorBase(Generic[T, OptsT]):
"""
Shared pagination state for cursor-based list endpoints.
Owns the `has_next` / `next_token` state and the reading of the
`x-next-token` response header (via `_update_pagination`). Each concrete
paginator implements `next_items` to do the actual fetching for its
endpoint, so any model can expose pagination by subclassing this without
reimplementing the bookkeeping.
`T` is the item type returned by `next_items`; `OptsT` is the connection
options type accepted by the paginator (an `ApiParams`-compatible TypedDict).
"""
def __init__(
self,
limit: Optional[int] = None,
next_token: Optional[str] = None,
**opts: Unpack[OptsT],
):
self._opts: OptsT = opts
self.limit = limit
self._has_next = True
self._next_token = next_token
@property
def has_next(self) -> bool:
"""
Returns True if there are more items to fetch.
"""
return self._has_next
@property
def next_token(self) -> Optional[str]:
"""
Returns the next token to use for pagination.
"""
return self._next_token
def _update_pagination(self, headers: Mapping[str, str]) -> None:
self._next_token = headers.get("x-next-token")
self._has_next = bool(self._next_token)