quart-schema icon indicating copy to clipboard operation
quart-schema copied to clipboard

Pydantic models are not valid Quart Response type

Open naitian opened this issue 1 year ago • 3 comments

I've implemented a basic version of the quickstart example using pydantic models:

from pydantic import BaseModel
from datetime import datetime

from quart import Quart
from quart_schema import QuartSchema, validate_request, validate_response

app = Quart(__name__)
QuartSchema(app)

class Todo(BaseModel):
    task: str
    due: datetime | None

@app.route("/", methods=["POST"])
@validate_request(Todo)
@validate_response(Todo, 201)
async def create_todo(data: Todo) -> tuple[Todo, int]:
    """Create a Todo"""
    # Do something with data, e.g. save to the DB
    print(data)
    return data, 201

This works (the docs get generated), but pylance reports a type error (Argument of type "(data: Todo) -> Coroutine[Any, Any, tuple[Todo, int]]" cannot be assigned to parameter of type "T_route@route" -- see screenshot from VS Code). As far as I understand, it's because Pydantic are not one of the Quart return types, but I guess I would have expected the @validate_response decorator to have done some kind of type coercion?

image

I'm not totally sure how Quart-Schema works so sorry if this issue actually belongs elsewhere. Thanks.

naitian avatar Sep 30 '24 05:09 naitian

Which version of pydantic are you using? I also had issues with pydantic BaseModels until I upgraded pydantic to the latest version.

epistoteles avatar Oct 15 '24 07:10 epistoteles

I'm on 2.9.2, which afaik is the latest unfortunately :(. Were your issues functional or just related to the type hinting?

naitian avatar Oct 17 '24 23:10 naitian

I don't think it is possible to type hint correctly yet, I think Concatenate needs kwarg support to do so.

pgjones avatar Jan 01 '25 20:01 pgjones