JRNET / core /error_handlers.py
Factor Studios
Upload 96 files
6a5b8d8 verified
"""
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)
}
)