Source code for ketl.db.settings

import os
import configparser

from pathlib import Path
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.session import Session


CONFIG_FILE = Path('ketl.ini')

if CONFIG_FILE.exists():
    parser = configparser.ConfigParser()
    parser.read(CONFIG_FILE)
    if 'ketl' in parser:
        DB_DSN = parser.get('ketl', 'DB_DSN', fallback=os.getenv('DB_DSN', 'sqlite:///ketl.db'))
    else:
        DB_DSN = os.getenv('DB_DSN', 'sqlite:///ketl.db')
else:
    DB_DSN = os.getenv('DB_DSN', 'sqlite:///ketl.db')


[docs]def get_engine(conn_string=DB_DSN): # extremely primitive memoization to get a single global engine object return get_session.__dict__.setdefault(f'_engine:{conn_string}', create_engine(conn_string))
[docs]def get_session() -> Session: # extremely primitive memoization to get a single global session object s_maker = get_session.__dict__.setdefault('_sessionmaker', sessionmaker(bind=get_engine())) return get_session.__dict__.setdefault('_session', s_maker())