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

372
Visualizações
Cómo hacer que el modelo base de Pydantic acepte algunos tipos de entrada de casos especiales en la aplicación fastapi

Tengo una aplicación fastapi, que toma "aplicación/json" entre otros tipos de entrada y devuelve "aplicación/json". Tengo un validador de entrada escrito subclasificando el modelo base de BaseModel y me gustaría que acepte algunos casos de entradas que recibo y no genere fastapi.exceptions.RequestValidationError en ellos.

algunas entradas aceptadas ( List[List[float]] ):

  1. {"input_json":[[1.0, 2.0, 3.0, 4.0]]}
  2. {"input_json":[[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0]]}

Me gustaría hacer que acepte los siguientes casos de entrada:

  1. {"input_json":[[1.0, 2.0, .0, 4.]]} (sin número después del punto decimal, las matrices numpy y las listas de python aceptan tales entradas completando 0 después del período, pero pydantic arroja un error de validación).
  2. {"input_json":[1.0, 2.0, 3.0, 4.0]} (no hay lista de listas, solo una lista. Manejaré la forma internamente haciendo numpy.my_array.reshape(-1, 4) , pero quiero que pydantic no generar RequestValidationError y enviar la entrada a mis puntos finales fastapi).
  3. {"input_json":[[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0],]} (coma al final de la segunda lista anidada. Las listas numpy y python aceptan tales entradas, pero pydantic no 't.)

Así es como se escribe mi clase de validación:

 from pydantic import BaseModel, validator class InputResponse(BaseModel): input_json: List[List[float]] @validator("input_json") def check_dimensionality(cls, list_of_lists): for nested_list in list_of_lists: if len(nested_list) != 4: raise ValueError(incomplete_msg) return list_of_lists

¿Qué cambios hago para poder aceptar todos esos casos de entrada?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Para eso, puede definir un TypeVar o usar un tipo de unión. En código que parece

 from typing import TypeVar, Union T = TypeVar("T", list[list[float]], list[float]) # Option with TypeVar class InputResponse(BaseModel): input_json: T # Option with Union type class InputResponse(BaseModel): input_json: Union[list[list[float]], list[float]]

Con respecto al cero que falta después del punto decimal, no he visto ningún problema con eso.

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