Skip to content

Instantly share code, notes, and snippets.

@jenia
Last active April 2, 2021 23:23
Show Gist options
  • Save jenia/83a8f4fcc4fd2ade04070314aa2e4522 to your computer and use it in GitHub Desktop.
Save jenia/83a8f4fcc4fd2ade04070314aa2e4522 to your computer and use it in GitHub Desktop.
fastapi-pagination
from fastapi import FastAPI
from datetime import date
from pydantic import BaseModel
from typing import List, Sequence, TypeVar, Generic
from fastapi_pagination import Page, add_pagination, paginate
from fastapi_pagination.bases import AbstractPage, AbstractParams, RawParams
from fastapi_pagination import Params
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__ = Params
@classmethod
def create(
cls,
data: Sequence[T],
links: Pagination,
params: AbstractParams
) -> Page[T]:
return cls(items=users)
@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