mirror of
https://github.com/grillazz/fastapi-sqlalchemy-asyncpg.git
synced 2026-01-17 11:40:39 +03:00
add excpetion_handlers module
This commit is contained in:
39
app/exception_handlers/validation.py
Normal file
39
app/exception_handlers/validation.py
Normal file
@@ -0,0 +1,39 @@
|
||||
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}
|
||||
)
|
||||
Reference in New Issue
Block a user