from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from utils.db_connectors import AssetsConnector, EncodingQueueConnector, \ EncodingOrderConnector, DeliveryBatchConnector, CustomerMasterConnector from aws_testing_utils.logger import log from utils.secrets_manager import SecretsManager class AlchemyDB: """ The art_relations SQL DB SQLAlchemy connector. https://docs.sqlalchemy.org/en/20/orm/session_basics.html """ def __init__(self, db_name): self.assets = None self.encoding_queue = None self.encoding_order = None self.delivery_batch = None self.customer_master_master_contact = None self.Session = None self.engine = None self.connection = None self.secrets_manager = SecretsManager() self.select_database(db_name) def make_connection(self): log.info("Test SQLAlchemy connection") try: self.connection = self.engine.connect() log.info("Connection successful!") except Exception as e: log.info("Connection failed:", e) def select_database(self, db_name): log.info(f'Select database {db_name} and create Session') db_creds = self.secrets_manager.get_db_credentials(db_name) user_creds = f'{db_creds["user"]}:{db_creds["password"]}' db_details = f'{db_creds["host"]}/{db_creds["database"]}' db_url = f'mysql://{user_creds}@{db_details}' self.engine = create_engine( url=db_url ) self.make_connection() self.Session = sessionmaker(bind=self.engine) self.set_connections(self.engine) def set_connections(self, engine): self.encoding_order = EncodingOrderConnector(engine) self.encoding_queue = EncodingQueueConnector(engine) self.assets = AssetsConnector(engine) self.delivery_batch = DeliveryBatchConnector(engine) self.customer_master_master_contact = CustomerMasterConnector(engine) def close_connection(self): self.Session().close()