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) request_info = get_request_context(request)
if isinstance(exc, RateLimitExceeded): 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): if isinstance(exc, HTTPException):
logging.error( logging.error(
f"HTTP exception | Code: {exc.status_code} | Error: {exc.detail} | Request: {request_info}", 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 import FastAPI, HTTPException, status
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from pydantic import ValidationError from pydantic import ValidationError
from slowapi import _rate_limit_exceeded_handler from slowapi import _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded from slowapi.errors import RateLimitExceeded
from sqlalchemy import inspect from sqlalchemy import inspect
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import scoped_session from sqlalchemy.orm import scoped_session
from sqlalchemy.ext.asyncio import async_scoped_session from sqlalchemy.ext.asyncio import async_scoped_session
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint 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") version="0.1.0")
app.state.limiter = limiter app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) 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) app.add_middleware(GZipMiddleware, minimum_size=2000)

Loading…
Cancel
Save