Source code for cata_log_hub.api.v1.pagination
from typing import TypeVar, override
from fastapi import Query
from fastapi_pagination import Page, Params
from fastapi_pagination.bases import RawParams
from fastapi_pagination.customization import (
CustomizedPage,
UseFieldsAliases,
UseFieldTypeAnnotations,
UseName,
UseParams,
)
from fastapi_pagination.types import GreaterEqualZero
from cata_log_hub.settings import get_settings
T = TypeVar("T")
[docs]
class PaginationParams(Params):
"""Queryparameters model for pagination."""
page: int = Query(0, ge=0, description="Pagination page number")
size: int = Query(
get_settings().api_default_pagination_page_size,
ge=1,
le=get_settings().api_max_pagination_page_size,
description="Pagination page size",
)
[docs]
@override
def to_raw_params(self) -> RawParams:
raw_params = super().to_raw_params()
if raw_params.offset is not None and raw_params.limit is not None:
raw_params.offset += raw_params.limit
return raw_params
PaginationPage = CustomizedPage[
Page[T],
UseParams(PaginationParams),
UseName("PaginationPage"),
UseFieldsAliases(items="results"),
UseFieldTypeAnnotations(page=GreaterEqualZero),
]