add validation errors

main
MrWaradana 4 weeks ago
parent 512031bf88
commit 783841d37e

@ -99,7 +99,30 @@ def handle_exception(request: Request, exc: Exception):
request_info = get_request_context(request)
if isinstance(exc, RateLimitExceeded):
_rate_limit_exceeded_handler(request, exc)
return _rate_limit_exceeded_handler(request, exc)
if isinstance(exc, RequestValidationError):
logging.error(
f"Validation error | Error: {str(exc.errors())} | Request: {request_info}",
extra={"error_category": "validation"},
)
return JSONResponse(
status_code=422,
content={
"data": None,
"message": "Validation error",
"status": ResponseStatus.ERROR,
"errors": [
ErrorDetail(
field=".".join(map(str, err["loc"])),
message=err["msg"],
code=err["type"],
).model_dump()
for err in exc.errors()
]
}
)
if isinstance(exc, HTTPException):
logging.error(
f"HTTP exception | Code: {exc.status_code} | Error: {exc.detail} | Request: {request_info}",

@ -7,12 +7,14 @@ from typing import Optional, Final
from fastapi import FastAPI, HTTPException, status
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from pydantic import ValidationError
from slowapi import _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
from sqlalchemy import inspect
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import scoped_session
from sqlalchemy.ext.asyncio import async_scoped_session
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
@ -47,6 +49,9 @@ app = FastAPI(exception_handlers=exception_handlers, openapi_url="", title="LCCA
version="0.1.0")
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
app.add_exception_handler(HTTPException, handle_exception)
app.add_exception_handler(RequestValidationError, handle_exception)
app.add_exception_handler(SQLAlchemyError, handle_exception)
app.add_middleware(GZipMiddleware, minimum_size=2000)

Loading…
Cancel
Save