from fastapi import FastAPI, HTTPException from fastapi.exceptions import RequestValidationError from starlette.requests import Request from starlette.responses import JSONResponse from starlette.status import ( HTTP_400_BAD_REQUEST, HTTP_401_UNAUTHORIZED, HTTP_403_FORBIDDEN, HTTP_404_NOT_FOUND, HTTP_422_UNPROCESSABLE_ENTITY, HTTP_500_INTERNAL_SERVER_ERROR, ) async def custom_http_exception_handler(request: Request, exc: HTTPException): return JSONResponse( status_code=exc.status_code, content={"error": exc.detail}, ) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=HTTP_400_BAD_REQUEST, content={"error": str(exc)}, ) async def exception_handler(request: Request, exc: Exception): return JSONResponse( status_code=HTTP_500_INTERNAL_SERVER_ERROR, content={"error": str(exc)}, ) def register(app: FastAPI): app.add_exception_handler(HTTPException, custom_http_exception_handler) app.add_exception_handler(RequestValidationError, validation_exception_handler) app.add_exception_handler(Exception, exception_handler)