🎨 Make Model.Schema callable with readonly arg

This commit is contained in:
Brian Wiborg 2025-09-29 18:22:43 +02:00
parent 29a5018ae3
commit c56ea6451e
No known key found for this signature in database
5 changed files with 29 additions and 22 deletions

View file

@ -125,6 +125,8 @@ Next, create your endpoints in `tournament/routes.py`:
from ohmyapi.router import APIRouter, HTTPException, HTTPStatus
from ohmyapi.db.exceptions import DoesNotExist
from typing import List
from .models import Tournament
# OhMyAPI will automatically pick up all instances of `fastapi.APIRouter` and
@ -137,23 +139,23 @@ from .models import Tournament
tournament_router = APIRouter(prefix="/tournament", tags=['Tournament'])
@tournament_router.get("/")
@tournament_router.get("/", response_model=List[Tournament.Schema()])
async def list():
queryset = Tournament.all()
return await Tournament.Schema.model.from_queryset(queryset)
@tournament_router.post("/", status_code=HTTPStatus.CREATED)
async def post(tournament: Tournament.Schema.readonly):
async def post(tournament: Tournament.Schema(readonly=True)):
queryset = Tournament.create(**payload.model_dump())
return await Tournament.Schema.model.from_queryset(queryset)
return await Tournament.Schema().from_queryset(queryset)
@tournament_router.get("/:id")
@tournament_router.get("/:id", response_model=Tournament.Schema())
async def get(id: str):
try:
queryset = Tournament.get(id=id)
return await Tournament.Schema.model.from_queryset_single(tournament)
return await Tournament.Schema().from_queryset_single(tournament)
except DoesNotExist:
raise HTTPException(status_code=404, detail="not found")
@ -273,7 +275,7 @@ router = APIRouter(prefix="/tournament", tags=["Tournament"])
@router.get("/")
async def list(user: auth.User = Depends(permissions.require_authenticated)):
queryset = Tournament.all()
return await Tournament.Schema.model.from_queryset(queryset)
return await Tournament.Schema().from_queryset(queryset)
...
@ -315,7 +317,7 @@ router = APIRouter(prefix="/tournament", tags=["Tournament"])
@router.get("/teams")
async def teams(user: auth.User = Depends(permissions.require_authenticated)):
queryset = Team.for_user(user)
return await Tournament.Schema.model.from_queryset(queryset)
return await Tournament.Schema().from_queryset(queryset)
```
## Shell