Mypy + FastAPI response_model

问题描述 投票:0回答:1

我在FastAPI项目中负责处理从Mypy 0.770到0.870的更新,这产生了一个错误,我无法完全解决。我的端点可以根据某种条件返回两个不同的模型,这表示为endpont装饰器:

@router.get("/", response_model=Union[Model1, Model2])

Mypy 0.870现在对此表示抱怨,>]

Argument "response_model" to "get" of "APIRouter" has incompatible type "object"; expected "Optional[Type[Any]]"

将其设置为单个类型,例如Model1或什至str,可以消除错误。 Any但是not

起作用。

现在,查看get方法,我发现response_model参数键入为Type[Any],我认为它必须是一个指针。

如何为我的API定义非简单的返回模型,并使Mypy开心?

编辑:我试图在一个较小的框架中重现该问题,但是不能。以下代码可以正常工作:

from typing import Any, Type, Union


def test1(var, response_model: Type[Any]):
    print(f"Accepted Type[Any], {var}")

def test2(var, response_model: Union[dict, set]):
    print(f"Accepted Union, {var}")

def main():
    test1('test1', response_model=Union[dict, set])
    test2('test2', response_model=Union[dict, set])

if __name__ == '__main__':
    main()
    

我在FastAPI项目中负责处理从Mypy 0.770到0.870的更新,这产生了一个错误,我无法完全解决。我的端点可以返回两个不同的...

python typing mypy fastapi
1个回答
0
投票

某物的Type[]表示这种类型的未实例化的类,而Model1在这里表示Model1类的实例或任何从Model1继承的实例。

© www.soinside.com 2019 - 2024. All rights reserved.