Add type to define OAS responses
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
from aiohttp import web
|
||||
|
||||
from aiohttp_pydantic import oas
|
||||
from aiohttp.web import middleware
|
||||
|
||||
from .view import PetItemView, PetCollectionView
|
||||
from aiohttp_pydantic import oas
|
||||
|
||||
from .model import Model
|
||||
from .view import PetCollectionView, PetItemView
|
||||
|
||||
|
||||
@middleware
|
||||
|
||||
@@ -6,6 +6,10 @@ class Pet(BaseModel):
|
||||
name: str
|
||||
|
||||
|
||||
class Error(BaseModel):
|
||||
error: str
|
||||
|
||||
|
||||
class Model:
|
||||
"""
|
||||
To keep simple this demo, we use a simple dict as database to
|
||||
|
||||
20
demo/view.py
20
demo/view.py
@@ -1,28 +1,32 @@
|
||||
from aiohttp_pydantic import PydanticView
|
||||
from typing import List, Union
|
||||
|
||||
from aiohttp import web
|
||||
|
||||
from .model import Pet
|
||||
from aiohttp_pydantic import PydanticView
|
||||
from aiohttp_pydantic.oas.typing import r200, r201, r204, r404
|
||||
|
||||
from .model import Error, Pet
|
||||
|
||||
|
||||
class PetCollectionView(PydanticView):
|
||||
async def get(self):
|
||||
async def get(self) -> r200[List[Pet]]:
|
||||
pets = self.request.app["model"].list_pets()
|
||||
return web.json_response([pet.dict() for pet in pets])
|
||||
|
||||
async def post(self, pet: Pet):
|
||||
async def post(self, pet: Pet) -> r201[Pet]:
|
||||
self.request.app["model"].add_pet(pet)
|
||||
return web.json_response(pet.dict())
|
||||
|
||||
|
||||
class PetItemView(PydanticView):
|
||||
async def get(self, id: int, /):
|
||||
async def get(self, id: int, /) -> Union[r200[Pet], r404[Error]]:
|
||||
pet = self.request.app["model"].find_pet(id)
|
||||
return web.json_response(pet.dict())
|
||||
|
||||
async def put(self, id: int, /, pet: Pet):
|
||||
async def put(self, id: int, /, pet: Pet) -> r200[Pet]:
|
||||
self.request.app["model"].update_pet(id, pet)
|
||||
return web.json_response(pet.dict())
|
||||
|
||||
async def delete(self, id: int, /):
|
||||
async def delete(self, id: int, /) -> r204:
|
||||
self.request.app["model"].remove_pet(id)
|
||||
return web.json_response(id)
|
||||
return web.Response(status=204)
|
||||
|
||||
Reference in New Issue
Block a user