mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-06-04 06:04:53 -04:00
* refactor(backend): ♻️ cleanup duplicate code in http services * refactor(backend): ♻️ refactor database away from singleton design removed the database single and instead injected the session into a new Database class that is created during each request life-cycle. Now sessions no longer need to be passed into each method on the database All tests pass, but there are likely some hidden breaking changes that were not discovered. * fix venv * disable venv cache * fix install script * bump poetry version * postgres fixes * revert install * fix db initialization for postgres * add postgres to docker * refactor(backend): ♻️ cleanup unused and duplicate code in http services * refactor(backend): remove sessions from arguments * refactor(backend): ♻️ convert units and ingredients to use http service class * test(backend): ✅ add unit and food tests * lint * update tags * re-enable cache * fix missing fraction in db * fix lint Co-authored-by: hay-kot <hay-kot@pm.me>
35 lines
781 B
Python
35 lines
781 B
Python
import sqlalchemy as sa
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy.orm.session import Session
|
|
|
|
from mealie.core.config import settings
|
|
|
|
|
|
def sql_global_init(db_url: str):
|
|
connect_args = {}
|
|
if "sqlite" in db_url:
|
|
connect_args["check_same_thread"] = False
|
|
|
|
engine = sa.create_engine(db_url, echo=False, connect_args=connect_args, pool_pre_ping=True)
|
|
|
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
|
|
return SessionLocal, engine
|
|
|
|
|
|
SessionLocal, engine = sql_global_init(settings.DB_URL)
|
|
|
|
|
|
def create_session() -> Session:
|
|
global SessionLocal
|
|
return SessionLocal()
|
|
|
|
|
|
def generate_session() -> Session:
|
|
global SessionLocal
|
|
db = SessionLocal()
|
|
try:
|
|
yield db
|
|
finally:
|
|
db.close()
|