Skip to content

Instantly share code, notes, and snippets.

@jenia
Last active April 3, 2021 00:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jenia/33f7aeb7a7a0ec17126bada4a0088ea2 to your computer and use it in GitHub Desktop.
Save jenia/33f7aeb7a7a0ec17126bada4a0088ea2 to your computer and use it in GitHub Desktop.
from fastapi import FastAPI
from datetime import date
from pydantic import BaseModel
from typing import List, Sequence, TypeVar, Generic
from fastapi_pagination import Page as BasePage, add_pagination, paginate
from fastapi import Query
from fastapi_pagination.bases import AbstractPage, AbstractParams, RawParams
from fastapi_pagination import Params as BaseParams
app = FastAPI()
T = TypeVar('T')
class Pagination(BaseModel):
next0: str
page: int
class User(BaseModel):
name: str
surname: str
class Page(AbstractPage[T], Generic[T]):
results: Sequence[T]
__params_type__ = BaseParams
@classmethod
def create(
cls,
items: Sequence[T],
total: int,
params: AbstractParams
) -> BasePage[T]:
return cls(results=users[1:2])
class Params(BaseModel, AbstractParams):
total_items: int
return_per_page: int
def to_raw_params(self) -> RawParams:
return RawParams(
limit=self.total_items,
offset=self.total_items * self.return_per_page,
)
class Params(BaseParams):
size: int = Query(10, gt=0, le=50, description="Page size")
class Page(BasePage[T], Generic[T]):
__params_type__ = Params
@app.get('/users', response_model=Page[User])
async def get_users():
return paginate(users)
users = [
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas1'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas'),
User(name='Yurii', surname='Karabas2'),
# ...
]
add_pagination(app)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment