Source code for chapps.dbsession

"""
SQLAlchemy DB session global setup
----------------------------------

This module's purpose is to present a simple and unencumbered module to include
in order to access the database according to the configured credentials.

"""
from sqlalchemy import create_engine, func, select
from sqlalchemy.engine import URL
from sqlalchemy.orm import sessionmaker
from chapps.config import CHAPPSConfig
import logging

logger = logging.getLogger(__name__)

DIALECT_MAP = dict(mariadb="mysql", mysql="mysql")
"""Map dialects to drivers, for DBI URL construction"""


[docs]def create_db_url(cfg: CHAPPSConfig = None) -> URL: """Create a DBI URL for initializing :mod:`SQLAlchemy` :param cfg: optional config override :returns: `URL <https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.engine.URL>`_ instance for use in accessing the database """ cfg = cfg or CHAPPSConfig.get_config() if not cfg.venvdetector.sb: logger.debug("Using config file: " + cfg.chapps.config_file) adapter = cfg.adapter if adapter.adapter not in DIALECT_MAP: raise ValueError( ( "Configured database adapter must be one of:" f"{', '.join([repr(v) for v in DIALECT_MAP.keys()])}" ) ) dialect = DIALECT_MAP[adapter.adapter] creds = dict( password=adapter.db_pass, # auto encoded username=adapter.db_user, host=adapter.db_host or "127.0.0.1", port=adapter.db_port or "3306", database=adapter.db_name, ) return URL.create(dialect, **creds)
sql_engine = create_engine(create_db_url()) """a package-global SQL engine"""