from backend.database.wrappers import Wrapper, MySQLWrapper from backend.logger import Logger from time import sleep def initialize_databases(configs, schemes): timeout = 5 max_retries = 7 for config in configs: if config['type'] == 'mysql': for _ in range(max_retries): try: Logger.get_logger().info(f'Trying to connect to database "{config["db_name"]}@{config["host"]}"...') wrapper = MySQLWrapper(config['host'], config['username'], config['password'], config['db_name']) Logger.get_logger().info('Connected.') break except Exception as e: Logger.get_logger().info(f'Connection failed. Reason: "{e}";\nTrying again...') sleep(timeout) else: Logger.get_logger().critical( f'Failed to connect to "{config["db_name"]}@{config["host"]}". ' f'Check that database and then restart this service.' ) continue wrappers[config['name']] = wrapper cursor = wrapper.connection.cursor() for scheme in schemes: Logger.get_logger().info(f'Preparing table "{scheme.meta["name"]}"...') cursor.execute(scheme.get_create_line()) wrapper.schemes[scheme.meta['name']] = scheme cursor.close() wrapper.connection.commit() def shutdown_databases(): Logger.get_logger().info('Shutting down databases...') for wrapper in wrappers: wrapper.close_connection() def get_wrapper_for(database_name) -> Wrapper: return wrappers.get(database_name, None) wrappers = {}