mirror of
https://github.com/grillazz/fastapi-sqlalchemy-asyncpg.git
synced 2025-08-26 16:40:40 +03:00
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
from fastapi import Request
|
|
from fastapi.exceptions import ResponseValidationError
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from app.exception_handlers.base import BaseExceptionHandler
|
|
|
|
|
|
class ResponseValidationExceptionHandler(BaseExceptionHandler):
|
|
"""Handles response validation exceptions."""
|
|
|
|
@classmethod
|
|
async def handle_exception(
|
|
cls, request: Request, exc: ResponseValidationError
|
|
) -> JSONResponse:
|
|
request_info = await cls.extract_request_info(request)
|
|
errors = exc.errors()
|
|
|
|
# Check if this is a None/null response case
|
|
is_none_response = False
|
|
for error in errors:
|
|
if error.get("input") is None and "valid dictionary" in error.get(
|
|
"msg", ""
|
|
):
|
|
is_none_response = True
|
|
break
|
|
|
|
await cls.log_error(
|
|
"Response validation error occurred",
|
|
request_info,
|
|
validation_errors=errors,
|
|
is_none_response=is_none_response,
|
|
)
|
|
|
|
if is_none_response:
|
|
return JSONResponse(
|
|
status_code=404,
|
|
content={"no_response": "The requested resource was not found"},
|
|
)
|
|
else:
|
|
return JSONResponse(
|
|
status_code=422, content={"response_format_error": errors}
|
|
)
|