sqlalchemy_async_repositories.pagination.strategies.base

Protocol for pagination strategies (Strategy Pattern).

This defines the interface that all pagination strategies must implement. Using Protocol (PEP 544) for structural subtyping - no inheritance needed.

Classes

IPaginationStrategy

Protocol for pagination strategies.

Module Contents

class sqlalchemy_async_repositories.pagination.strategies.base.IPaginationStrategy

Bases: Protocol

Protocol for pagination strategies.

Implementations: - FastCRUDStrategy: Uses FastCRUD library (battle-tested, feature-rich) - NativeStrategy: Uses native SQLAlchemy (zero dependencies, fallback)

Why Protocol? - Type-safe without inheritance - Easy to test (mock the protocol) - Clear interface contract - IDE autocomplete support

async execute(db: sqlalchemy.ext.asyncio.AsyncSession, model_class: Type[sqlalchemy.orm.DeclarativeBase], page: int, page_size: int, filters: List[sqlalchemy_async_repositories.pagination.models.FilterSpec] | None, sort: List[sqlalchemy_async_repositories.pagination.models.SortSpec] | None) sqlalchemy_async_repositories.pagination.models.PaginatedResult

Execute paginated query.

Args:

db: Async database session model_class: SQLAlchemy model class page: Page number (1-indexed) page_size: Items per page filters: List of filter specifications sort: List of sort specifications

Returns:

PaginatedResult with items and metadata