Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

794
Views
Modelo de respuesta Mypy + FastAPI

Se me asignó la tarea de manejar la actualización de Mypy 0.770 a 0.870 en nuestro proyecto FastAPI, y esto produjo un error que no puedo comprender. Mi punto final puede devolver dos modelos diferentes en función de alguna condición, y esto se denotó de la siguiente manera el decorador de punto final:

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

Mypy 0.870 ahora se queja de esto, afirmando que

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

Establecerlo en tipos únicos, como Model1 o incluso str elimina el error. Any sin embargo, no funciona.

Ahora, al examinar el método get , veo que el argumento response_model se escribe como Type[Any] , que supongo que debe ser un puntero.

¿Cómo puedo definir modelos de devolución no simples para mi API y hacer feliz a Mypy?

editar: traté de reproducir el problema en un marco más pequeño, pero no pude. El siguiente código funciona bien:

 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()
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Este es un problema de compatibilidad introducido en las versiones más recientes de mypy. Hay un problema abierto en Github sobre este tema: https://github.com/tiangolo/fastapi/issues/2279

En la discusión, proporcionan las siguientes soluciones:

  • Usando un enfoque diferente para crear un alias de tipo:

    NewModel = TypeVar('NewModel',Model1,Model2)

  • Creando un nuevo modelo Pydantic:

     class NewModel(BaseModel): __root__: Union[Model1, Model2]
over 4 years ago · Santiago Trujillo Report

0

Type[] of something significa una clase no instanciada de este tipo, mientras que Model1 aquí significará una instancia de una clase Model1 o una instancia de cualquier cosa que herede de Model1 .

No obstante, el mensaje de error es enigmático.

¿Qué python -v estás usando? Escribir es algo nuevo en un mundo de python y las cosas también pueden cambiar entre las versiones de python. Si superó la versión de mypy , podría ser bueno actualizar python , ya que van juntos.

Además, ¿qué versión de fastapi estás usando? También intentaría actualizarlo a la última versión, 0.55.1 . El propio Tiangolo escribió que han tenido un error al escribir

fuente

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!