Skip to content

feat: pagination iterators for list/search methods #6

@stemirkhan

Description

@stemirkhan

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

  • Sync-генераторы (Iterator[T]) в каждом API-классе
  • Async-генераторы (AsyncIterator[T]) в async-классах
  • Тесты: корректная пагинация, остановка на последней странице, пустой результат
  • Экспорт из __init__.py не нужен (методы на классах)
  • mypy --strict + ruff clean
  • Bump version → 1.3.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions