55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
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,
|
|
encoding="utf-8",
|
|
echo=Config.DISPLAY_SQL,
|
|
pool_pre_ping=True,
|
|
future=True,
|
|
)
|
|
|
|
|
|
@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()
|