integrated pagination with tortoise
This commit is contained in:
parent
34f8374082
commit
0f8ed8d8b3
|
@ -1,10 +0,0 @@
|
|||
from typing import List
|
||||
|
||||
from fastapi_pagination import paginate
|
||||
from tortoise import Model
|
||||
|
||||
|
||||
async def transform_and_paginate(model, model_list: List[Model]):
|
||||
return paginate(
|
||||
[await model.to_pydantic().from_tortoise_orm(x) for x in model_list]
|
||||
)
|
|
@ -1,12 +1,10 @@
|
|||
from fastapi_pagination import Page
|
||||
from fastapi_pagination.ext.tortoise import paginate
|
||||
|
||||
from mobilizon_reshare.models.event import Event
|
||||
from mobilizon_reshare.storage.query.read import get_all_events
|
||||
from mobilizon_reshare.web import transform_and_paginate
|
||||
|
||||
|
||||
def register_endpoints(app):
|
||||
@app.get("/events", status_code=200, response_model=Page[Event.to_pydantic()])
|
||||
async def get_events():
|
||||
all_events = await get_all_events()
|
||||
return await transform_and_paginate(Event, all_events)
|
||||
return await paginate(Event, prefetch_related=True)
|
||||
|
|
|
@ -30,10 +30,15 @@ def register_endpoints(app):
|
|||
register_publication_endpoints(app)
|
||||
|
||||
|
||||
def init_endpoints(app):
|
||||
|
||||
register_endpoints(app)
|
||||
add_pagination(app)
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
async def init_app(init_logging=True):
|
||||
check_database()
|
||||
await init_db(init_logging=init_logging)
|
||||
register_endpoints(app)
|
||||
add_pagination(app)
|
||||
init_endpoints(app)
|
||||
return app
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from fastapi_pagination import Page
|
||||
from fastapi_pagination.ext.tortoise import paginate
|
||||
|
||||
from mobilizon_reshare.models.publication import Publication
|
||||
from mobilizon_reshare.web import transform_and_paginate
|
||||
|
||||
|
||||
def register_endpoints(app):
|
||||
|
@ -9,4 +9,4 @@ def register_endpoints(app):
|
|||
"/publications", status_code=200, response_model=Page[Publication.to_pydantic()]
|
||||
)
|
||||
async def get_publications():
|
||||
return await transform_and_paginate(Publication, await Publication.all())
|
||||
return await paginate(Publication, prefetch_related=True)
|
||||
|
|
|
@ -3,7 +3,7 @@ import urllib3
|
|||
from httpx import AsyncClient
|
||||
|
||||
from mobilizon_reshare.storage import db
|
||||
from mobilizon_reshare.web.backend.main import app, register_endpoints
|
||||
from mobilizon_reshare.web.backend.main import app, init_endpoints
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
|
@ -13,7 +13,8 @@ def anyio_backend():
|
|||
|
||||
@pytest.fixture()
|
||||
async def client():
|
||||
register_endpoints(app)
|
||||
init_endpoints(app)
|
||||
|
||||
async with AsyncClient(app=app, base_url="http://test") as client:
|
||||
yield client
|
||||
|
||||
|
|
|
@ -14,4 +14,4 @@ async def test_events(client: AsyncClient, event_model_generator):
|
|||
response = await client.get("/events")
|
||||
assert response.status_code == 200
|
||||
expected = await Event.to_pydantic().from_tortoise_orm(event)
|
||||
assert response.json()[0] == json.loads(expected.json())
|
||||
assert response.json()["items"][0] == json.loads(expected.json())
|
||||
|
|
Loading…
Reference in New Issue