chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user