Option to return more than 100 rows
Great package!
Is there a way to increase the max page size above 100? It looks like the max page size is hardcoded to 100 here:
https://github.com/uriyyo/fastapi-pagination/blob/main/fastapi_pagination/default.py#L41
If not, making it configurable in some way might be more efficient when returning small rows.
Hi @clarkgrubb,
Sure, you can use CustomizedPage, here is an example:
from typing import TypeVar
from fastapi_pagination import Page
from fastapi_pagination.customization import CustomizedPage, UseParamsFields
from fastapi import Query
T = TypeVar("T")
CustomPage = CustomizedPage[
Page[T],
UseParamsFields(size=Query(le=200))
]
Thanks for the response. It doesn't seem to work for me for some reason.
Here is my Page class:
ParkedDomainPage = CustomizedPage[
Page[TypeVar('T')],
UseName('ParkedDomainPage'),
UseParamsFields(
size=Query(le=500),
),
UseFieldsAliases(
items='parked_domains',
size='per_page'),
UseExcludedFields('total'),
]
Here is the error I get when I try to use it:
1725384117.973273 [error ] validation_error details=[{'message': 'Input should be less than or equal to 100', 'field': 'size', 'value': 500}] request_data={'url': URL('http://127.0.0.1:8000/v2/campaigns/domains?sort_by=created_at&sort_direction=asc&page=1&per_page=500'), 'query_params': QueryParams('sort_by=created_at&sort_direction=asc&page=1&per_page=500')}
Here is my endpoint signature:
@router.get('/domains',
status_code=200,
response_model=ParkedDomainPage[ParkedDomainSchema])
def get_parked_domains(
db: db_dependency,
request: Request,
linkset: Union[List[str], None] = Query(None),
parked_domain: Union[List[str], None] = Query(None),
partner_id: Union[List[int], None] = Query(None),
query: Union[str, None] = None,
requestor: Union[List[str], None] = Query(None),
status: Union[List[str], None] = Query(None),
use_webhook: Union[bool, None] = None,
sort_by: Union[str, None] = SORT_BY_ENUM[0],
sort_direction: Union[str, None] = SORT_DIRECTION_ENUM[0],
eu_domain: Union[bool, None] = None,
caller: Union[str, None] = None,
page: int = 1,
per_page: int = 20):
Hi @clarkgrubb,
Sorry, for long response. I guess we also need to add alias for size params field, here is an example:
from typing import TypeVar
from fastapi import FastAPI, Query
from fastapi_pagination import Page, add_pagination, paginate
from fastapi_pagination.customization import (
CustomizedPage,
UseExcludedFields,
UseFieldsAliases,
UseName,
UseParamsFields,
)
app = FastAPI()
add_pagination(app)
T = TypeVar("T")
ParkedDomainPage = CustomizedPage[
Page[T],
UseName("ParkedDomainPage"),
UseParamsFields(
size=Query(
le=500,
alias="per_page",
),
),
UseFieldsAliases(
items="parked_domains",
size="per_page",
),
UseExcludedFields("total"),
]
@app.get("/items")
async def read_items() -> ParkedDomainPage[int]:
return paginate([*range(1_000)])
if __name__ == "__main__":
import uvicorn
uvicorn.run(app)
Hi @clarkgrubb,
I'm closing this issue, please reopen if this issue still exists on your side