pgjones / quart-schema

Quart-Schema is a Quart extension that provides schema validation and auto-generated API documentation.
MIT License
82 stars 23 forks source link

Pydantic models are not valid Quart Response type #91

Open naitian opened 1 month ago

naitian commented 1 month ago

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.

epistoteles commented 1 month ago

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

naitian commented 1 month ago

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