40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
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)
|