mirror of
https://github.com/flibusta-apps/book_library_server.git
synced 2025-12-06 07:05:36 +01:00
Init
This commit is contained in:
33
fastapi_book_server/app/utils/pagination.py
Normal file
33
fastapi_book_server/app/utils/pagination.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from typing import Protocol, TypeVar, Any, Generic, Sequence, runtime_checkable
|
||||
from dataclasses import asdict
|
||||
|
||||
from fastapi_pagination import Page, Params
|
||||
from fastapi_pagination.bases import AbstractParams
|
||||
|
||||
|
||||
@runtime_checkable
|
||||
class ToDict(Protocol):
|
||||
def dict(self) -> dict:
|
||||
...
|
||||
|
||||
|
||||
T = TypeVar('T', ToDict, Any)
|
||||
|
||||
|
||||
class CustomPage(Page[T], Generic[T]):
|
||||
@classmethod
|
||||
def create(
|
||||
cls,
|
||||
items: Sequence[T],
|
||||
total: int,
|
||||
params: AbstractParams,
|
||||
) -> Page[T]:
|
||||
if not isinstance(params, Params):
|
||||
raise ValueError("Page should be used with Params")
|
||||
|
||||
return cls(
|
||||
total=total,
|
||||
items=[item.dict() for item in items],
|
||||
page=params.page,
|
||||
size=params.size,
|
||||
)
|
||||
Reference in New Issue
Block a user