29 lines
825 B
Python
29 lines
825 B
Python
from typing import Union
|
|
|
|
from fastapi.exceptions import RequestValidationError
|
|
from fastapi.openapi.constants import REF_PREFIX
|
|
from fastapi.openapi.utils import validation_error_response_definition
|
|
from pydantic import ValidationError
|
|
from starlette.requests import Request
|
|
from starlette.responses import JSONResponse
|
|
from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY
|
|
|
|
|
|
async def http422_error_handler(
|
|
_: Request,
|
|
exc: Union[RequestValidationError, ValidationError],
|
|
) -> JSONResponse:
|
|
return JSONResponse(
|
|
{"errors": exc.errors()},
|
|
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
)
|
|
|
|
|
|
validation_error_response_definition["properties"] = {
|
|
"errors": {
|
|
"title": "Errors",
|
|
"type": "array",
|
|
"items": {"$ref": "{0}ValidationError".format(REF_PREFIX)},
|
|
},
|
|
}
|