mirror of
https://github.com/grillazz/fastapi-sqlalchemy-asyncpg.git
synced 2025-08-26 16:40:40 +03:00
wip: add exception handler
This commit is contained in:
parent
69f3dc3fd8
commit
58553c6d63
@ -1,8 +1,9 @@
|
|||||||
from collections.abc import AsyncGenerator
|
from collections.abc import AsyncGenerator
|
||||||
|
|
||||||
from rotoger import AppStructLogger
|
from rotoger import AppStructLogger
|
||||||
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
|
||||||
from sqlalchemy.exc import SQLAlchemyError
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
|
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
||||||
|
|
||||||
from app.config import settings as global_settings
|
from app.config import settings as global_settings
|
||||||
|
|
||||||
logger = AppStructLogger().get_logger()
|
logger = AppStructLogger().get_logger()
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
from fastapi import Request
|
|
||||||
from fastapi.responses import JSONResponse
|
|
||||||
from sqlalchemy.exc import SQLAlchemyError
|
|
||||||
import orjson
|
import orjson
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI, Request
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
from rotoger import AppStructLogger
|
from rotoger import AppStructLogger
|
||||||
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
|
|
||||||
logger = AppStructLogger().get_logger()
|
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
|
request_path = request.url.path
|
||||||
try:
|
try:
|
||||||
raw_body = await request.body()
|
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."},
|
content={"message": "A database error occurred. Please try again later."},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def register_exception_handlers(app: FastAPI) -> None:
|
def register_exception_handlers(app: FastAPI) -> None:
|
||||||
"""Register all exception handlers with the FastAPI app."""
|
"""Register all exception handlers with the FastAPI app."""
|
||||||
app.add_exception_handler(SQLAlchemyError, sqlalchemy_exception_handler)
|
app.add_exception_handler(SQLAlchemyError, sqlalchemy_exception_handler)
|
||||||
|
@ -7,7 +7,6 @@ from fastapi.responses import HTMLResponse
|
|||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
from rotoger import AppStructLogger
|
from rotoger import AppStructLogger
|
||||||
|
|
||||||
|
|
||||||
from app.api.health import router as health_router
|
from app.api.health import router as health_router
|
||||||
from app.api.ml import router as ml_router
|
from app.api.ml import router as ml_router
|
||||||
from app.api.nonsense import router as nonsense_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.stuff import router as stuff_router
|
||||||
from app.api.user import router as user_router
|
from app.api.user import router as user_router
|
||||||
from app.config import settings as global_settings
|
from app.config import settings as global_settings
|
||||||
|
from app.exception_handlers import register_exception_handlers
|
||||||
from app.redis import get_redis
|
from app.redis import get_redis
|
||||||
from app.services.auth import AuthBearer
|
from app.services.auth import AuthBearer
|
||||||
from app.exception_handlers import register_exception_handlers
|
|
||||||
|
|
||||||
logger = AppStructLogger().get_logger()
|
logger = AppStructLogger().get_logger()
|
||||||
templates = Jinja2Templates(directory=Path(__file__).parent.parent / "templates")
|
templates = Jinja2Templates(directory=Path(__file__).parent.parent / "templates")
|
||||||
|
@ -25,7 +25,6 @@ class Base(DeclarativeBase):
|
|||||||
await db_session.refresh(self)
|
await db_session.refresh(self)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
async def delete(self, db_session: AsyncSession):
|
async def delete(self, db_session: AsyncSession):
|
||||||
try:
|
try:
|
||||||
await db_session.delete(self)
|
await db_session.delete(self)
|
||||||
@ -58,4 +57,3 @@ class Base(DeclarativeBase):
|
|||||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||||
detail=repr(exception),
|
detail=repr(exception),
|
||||||
) from exception
|
) from exception
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user