Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

807
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda