""" 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) } )