Summary
Добавить удобные итераторы-генераторы, которые автоматически проходят по всем страницам для методов с пагинацией (limit/skip).
Проблема
Сейчас пользователь должен вручную управлять пагинацией:
skip = 0
while True:
resp = client.orders.search_orders(oms_id, filter=f, limit=100, page=skip)
results.extend(resp.results)
if len(resp.results) < 100:
break
skip += 1
Реализация
Добавить в каждый API-класс методы iter_* — синхронный генератор и async-генератор:
OrdersApi
def iter_orders(self, oms_id: str, *, page_size: int = 100) -> Iterator[OrderSummaryInfo]: ...
def iter_search_orders(self, oms_id: str, filter: OrderFilter | None = None, *, page_size: int = 100) -> Iterator[dict]: ...
DocumentsApi
def iter_documents(self, oms_id: str, document_type: str, *, page_size: int = 100) -> Iterator[dict]: ...
IntegrationApi
def iter_connections(self, oms_id: str, *, page_size: int = 100) -> Iterator[ConnectionInfo]: ...
Async-версии
async def aiter_orders(...) -> AsyncIterator[OrderSummaryInfo]: ...
Реализация генератора (пример)
def iter_orders(self, oms_id, *, page_size=100):
skip = 0
while True:
resp = self.list_orders(oms_id, limit=page_size, skip=skip)
yield from resp.order_infos
if len(resp.order_infos) < page_size:
break
skip += page_size
Методы с пагинацией (таргет)
| API |
Метод |
iter-версия |
OrdersApi |
list_orders |
iter_orders |
OrdersApi |
search_orders |
iter_search_orders |
DocumentsApi |
search_documents |
iter_documents |
IntegrationApi |
list_connections |
iter_connections |
Checklist
Summary
Добавить удобные итераторы-генераторы, которые автоматически проходят по всем страницам для методов с пагинацией (
limit/skip).Проблема
Сейчас пользователь должен вручную управлять пагинацией:
Реализация
Добавить в каждый API-класс методы
iter_*— синхронный генератор и async-генератор:OrdersApiDocumentsApiIntegrationApiAsync-версии
Реализация генератора (пример)
Методы с пагинацией (таргет)
OrdersApilist_ordersiter_ordersOrdersApisearch_ordersiter_search_ordersDocumentsApisearch_documentsiter_documentsIntegrationApilist_connectionsiter_connectionsChecklist
Iterator[T]) в каждом API-классеAsyncIterator[T]) в async-классах__init__.pyне нужен (методы на классах)mypy --strict+ruffclean