""" Setup database connections """ import sqlite3 import psycopg2 import logging.config from platformdirs import PlatformDirs from pathlib import Path import yaml def get_database_cursors(log, config: str): dirs = PlatformDirs(config) database_config = Path(dirs.user_config_dir, 'database-config.yaml') with open(database_config, 'rt') as f: db_config = yaml.safe_load(f.read()) sqlite_db = db_config["sqlite"]["file"] log.info('using SQLite3 database {}'.format(sqlite_db)) sqlite_conn = sqlite3.connect(sqlite_db, detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) mariadb_conn = None postgres_conn = psycopg2.connect(f"host={db_config['postgres']['host']} port={db_config['postgres']['port']} user={db_config['postgres']['user']} password={db_config['postgres']['password']} dbname={db_config['postgres']['database']}") return sqlite_conn, mariadb_conn, postgres_conn def create_tables(sqlite_conn, logger, recreate_db, scripts): logger.info('create_tables') for table_id in scripts: create_statement = scripts[table_id]['create'] drop_statement = scripts[table_id]['drop'] logger.debug(create_statement) cursor = sqlite_conn.cursor() if recreate_db: logger.debug(drop_statement) cursor.execute(drop_statement) cursor.execute(create_statement) def get_logger(level, config: str): dirs = PlatformDirs(config) logging_config = Path(dirs.user_config_dir, 'logging-config.yaml') with open(logging_config, 'rt') as f: log_config = yaml.safe_load(f.read()) logging.config.dictConfig(log_config) logger = logging.getLogger('development') if level is not None: match level: case 0: logger.setLevel(logging.CRITICAL) case 1: logger.setLevel(logging.INFO) case 2: logger.setLevel(logging.DEBUG) case _: logger.setLevel(logging.INFO) return logger