import inspect import os from config import Config from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session from typing import Generator from log import log MYSQL_CONNECT = os.environ.get("MM_DB") if MYSQL_CONNECT is None: raise ValueError("MYSQL_CONNECT is undefined") else: dbname = MYSQL_CONNECT.split("/")[-1] log.debug(f"Database: {dbname}") # MM_ENV = os.environ.get('MM_ENV', 'PRODUCTION') # testing = False # if MM_ENV == 'TESTING': # dbname = os.environ.get('MM_TESTING_DBNAME', 'musicmuster_testing') # dbuser = os.environ.get('MM_TESTING_DBUSER', 'musicmuster_testing') # dbpw = os.environ.get('MM_TESTING_DBPW', 'musicmuster_testing') # dbhost = os.environ.get('MM_TESTING_DBHOST', 'localhost') # testing = True # else: # raise ValueError(f"Unknown MusicMuster environment: {MM_ENV=}") # # MYSQL_CONNECT = f"mysql+mysqldb://{dbuser}:{dbpw}@{dbhost}/{dbname}" engine = create_engine( MYSQL_CONNECT, echo=Config.DISPLAY_SQL, pool_pre_ping=True, future=True, connect_args={"charset": "utf8mb4"}, ) @contextmanager def Session() -> Generator[scoped_session, None, None]: frame = inspect.stack()[2] file = frame.filename function = frame.function lineno = frame.lineno Session = scoped_session(sessionmaker(bind=engine, future=True)) log.debug(f"SqlA: session acquired [{hex(id(Session))}]") log.debug( f"Session acquisition: {file}:{function}:{lineno} " f"[{hex(id(Session))}]" ) yield Session log.debug(f" SqlA: session released [{hex(id(Session))}]") Session.commit() Session.close()