From 58553c6d63cb7b5128b65285299cf72e90575a7d Mon Sep 17 00:00:00 2001 From: grillazz Date: Sat, 23 Aug 2025 18:22:51 +0200 Subject: [PATCH] wip: add exception handler --- app/database.py | 3 ++- app/exception_handlers.py | 13 ++++++++----- app/main.py | 3 +-- app/models/base.py | 2 -- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/database.py b/app/database.py index e400ed6..8e00277 100644 --- a/app/database.py +++ b/app/database.py @@ -1,8 +1,9 @@ from collections.abc import AsyncGenerator from rotoger import AppStructLogger -from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine from sqlalchemy.exc import SQLAlchemyError +from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine + from app.config import settings as global_settings logger = AppStructLogger().get_logger() diff --git a/app/exception_handlers.py b/app/exception_handlers.py index c67ca13..55f765b 100644 --- a/app/exception_handlers.py +++ b/app/exception_handlers.py @@ -1,13 +1,15 @@ -from fastapi import Request -from fastapi.responses import JSONResponse -from sqlalchemy.exc import SQLAlchemyError import orjson -from fastapi import FastAPI +from fastapi import FastAPI, Request +from fastapi.responses import JSONResponse from rotoger import AppStructLogger +from sqlalchemy.exc import SQLAlchemyError logger = AppStructLogger().get_logger() -async def sqlalchemy_exception_handler(request: Request, exc: SQLAlchemyError) -> JSONResponse: + +async def sqlalchemy_exception_handler( + request: Request, exc: SQLAlchemyError +) -> JSONResponse: request_path = request.url.path try: raw_body = await request.body() @@ -27,6 +29,7 @@ async def sqlalchemy_exception_handler(request: Request, exc: SQLAlchemyError) - content={"message": "A database error occurred. Please try again later."}, ) + def register_exception_handlers(app: FastAPI) -> None: """Register all exception handlers with the FastAPI app.""" app.add_exception_handler(SQLAlchemyError, sqlalchemy_exception_handler) diff --git a/app/main.py b/app/main.py index 1bf1fee..31c9c18 100644 --- a/app/main.py +++ b/app/main.py @@ -7,7 +7,6 @@ from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from rotoger import AppStructLogger - from app.api.health import router as health_router from app.api.ml import router as ml_router from app.api.nonsense import router as nonsense_router @@ -15,9 +14,9 @@ from app.api.shakespeare import router as shakespeare_router from app.api.stuff import router as stuff_router from app.api.user import router as user_router from app.config import settings as global_settings +from app.exception_handlers import register_exception_handlers from app.redis import get_redis from app.services.auth import AuthBearer -from app.exception_handlers import register_exception_handlers logger = AppStructLogger().get_logger() templates = Jinja2Templates(directory=Path(__file__).parent.parent / "templates") diff --git a/app/models/base.py b/app/models/base.py index 1347c6e..faaf1a2 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -25,7 +25,6 @@ class Base(DeclarativeBase): await db_session.refresh(self) return self - async def delete(self, db_session: AsyncSession): try: await db_session.delete(self) @@ -58,4 +57,3 @@ class Base(DeclarativeBase): status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=repr(exception), ) from exception -