Spaces:
Runtime error
Runtime error
File size: 1,685 Bytes
6a5b8d8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
"""
Global error handlers and exceptions
"""
from fastapi import FastAPI, Request, status
from fastapi.responses import JSONResponse
from sqlalchemy.exc import SQLAlchemyError
from typing import Union, Dict, Any
class AppException(Exception):
"""Base application exception"""
def __init__(
self,
status_code: int,
detail: Union[str, Dict[str, Any]],
headers: Dict[str, str] = None
):
self.status_code = status_code
self.detail = detail
self.headers = headers
def setup_error_handlers(app: FastAPI):
"""Setup global error handlers"""
@app.exception_handler(AppException)
async def app_exception_handler(request: Request, exc: AppException):
headers = exc.headers if exc.headers else {}
return JSONResponse(
status_code=exc.status_code,
content={"detail": exc.detail},
headers=headers
)
@app.exception_handler(SQLAlchemyError)
async def sqlalchemy_exception_handler(request: Request, exc: SQLAlchemyError):
return JSONResponse(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
content={
"detail": "Database error occurred",
"message": str(exc)
}
)
@app.exception_handler(Exception)
async def general_exception_handler(request: Request, exc: Exception):
return JSONResponse(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
content={
"detail": "An unexpected error occurred",
"message": str(exc)
}
)
|