Init
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
from sqlalchemy import create_engine, event
|
||||
from sqlalchemy.orm import sessionmaker, with_loader_criteria
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from typing import Annotated
|
||||
from fastapi import Depends
|
||||
from sqlalchemy.orm import Session
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
|
||||
load_dotenv()
|
||||
|
||||
engine = create_engine(os.getenv("DATABASE_URL", ""))
|
||||
SessionLocal = sessionmaker(autoflush=False, bind=engine)
|
||||
|
||||
def safe_commit(db : Session):
|
||||
try:
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
raise
|
||||
|
||||
def get_db():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
except Exception:
|
||||
db.rollback()
|
||||
raise
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@event.listens_for(SessionLocal, "do_orm_execute")
|
||||
def _add_filtering_criterial(execute_state):
|
||||
skip_filter = execute_state.execution_options.get("skip_filter", False)
|
||||
|
||||
if execute_state.is_select and not skip_filter:
|
||||
|
||||
from ..models.models import AuditMixin
|
||||
|
||||
execute_state.statement = execute_state.statement.options(
|
||||
with_loader_criteria(
|
||||
AuditMixin,
|
||||
lambda cls: cls.is_archived.is_(False),
|
||||
include_aliases = True,
|
||||
)
|
||||
)
|
||||
|
||||
db_dependency = Annotated[Session, Depends(get_db)]
|
||||
Reference in New Issue
Block a user