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

369
Views
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 answers
Answer question

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 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!