Source code for fastapi_contrib.routes

from typing import Callable

from fastapi.exceptions import RequestValidationError
from fastapi.routing import APIRoute
from starlette.requests import Request
from starlette.responses import Response

from fastapi_contrib.common.responses import UJSONResponse


[docs]class ValidationErrorLoggingRoute(APIRoute):
[docs] def get_route_handler(self) -> Callable: original_route_handler = super().get_route_handler() async def custom_route_handler(request: Request) -> Response: try: return await original_route_handler(request) except RequestValidationError as exc: body = await request.body() if not body: status_code = 400 data = { "code": status_code, "detail": "Empty body for this request is not valid.", "fields": [], } return UJSONResponse(data, status_code=status_code) else: raise exc return custom_route_handler