1

I use FastAPI version 0.87.0

And I need

  • define validation function which is can access multiple field at once. like this if name is None and number is None
    • So I use root_validator
  • raise custom Exception from null request, not Pydantic Error (1 validation error for Request\nquery -> ...)
    • So I use root_validator(pre=True)
  • And Swagger UI display it required
    • So I can not define like this Query(None), it must be Query(...)
  • And it defined with custom alias field name, and description.
    • so I use Query, Body from FastAPI.
@router.get("/foo")
async def foo(req: FooReq):
  ...

class FooReq(BaseModel):
  required_field: str = Query(..., alias='requiredField', description='description')
  not_required_field: int | None = Query(None, alias='notRequiredField', description='description')

  @root_validator(pre=True):
  def my_validation(cls, values):
    if values.get('requiredField') is None:
      raise CustomException

case 1

raise CustomException fine. but Swagger display not required

required_field: str = Query(None, alias='requiredField', description='description')
required_field: str | None = Query(None, alias='requiredField', description='description')

case 2

the Swagger display required fine, but it raise Pydantic Error

required_field: str = Query(..., alias='requiredField', description='description')
required_field: str | None = Query(..., alias='requiredField', description='description')

how to do that?

is there any other best practice handling validation with custom exception?

양정훈
  • 245
  • 1
  • 4
  • 13
  • You might also find [this answer](https://stackoverflow.com/a/75545471/17865804) and [this answer](https://stackoverflow.com/a/70954531/17865804), as well as [this](https://stackoverflow.com/a/71800464/17865804) and [this](https://stackoverflow.com/a/75998823/17865804) helpful – Chris Jun 19 '23 at 07:48

0 Answers0