From bc90bf1c3aaf2823b92c40b41c78b5092df1be1b Mon Sep 17 00:00:00 2001
From: Marko Mecina <marko.mecina@univie.ac.at>
Date: Tue, 15 Feb 2022 13:42:43 +0100
Subject: [PATCH] update MySQL connection string generation/handling

---
 Ccs/database/config_db.py |  3 ++-
 Ccs/database/tm_db.py     | 37 +++++++++++++++++++++----------------
 2 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/Ccs/database/config_db.py b/Ccs/database/config_db.py
index e14a663..798803b 100644
--- a/Ccs/database/config_db.py
+++ b/Ccs/database/config_db.py
@@ -4,6 +4,7 @@ cfg = confignator.get_config()
 
 user = cfg.get('database', 'user')
 pw = cfg.get('database', 'password')
+host = cfg.get('database', 'host')
 
 # --------------- SMILE ---------------
 # idb_schema_name = 'mib_smile_sxi'
@@ -19,4 +20,4 @@ telemetry_pool_table = 'tm_pool'
 telemetry_table = 'tm'
 
 # --------------- database connection ---------------
-mysql_connection_string = 'mysql://{}:{}@localhost'.format(user, pw)
+mysql_connection_string = 'mysql://{}:{}@{}'.format(user, pw, host)
diff --git a/Ccs/database/tm_db.py b/Ccs/database/tm_db.py
index 126f852..8d14fe4 100644
--- a/Ccs/database/tm_db.py
+++ b/Ccs/database/tm_db.py
@@ -7,7 +7,7 @@ import sys
 
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy import (
-    Column, Integer, Boolean, Unicode, Index, UniqueConstraint, ForeignKey, create_engine)
+    Column, Integer, Boolean, Unicode, Index, UniqueConstraint, ForeignKey, create_engine, engine)
 from sqlalchemy.dialects.mysql import VARBINARY
 from sqlalchemy.orm import sessionmaker, relationship, scoped_session
 # from sqlalchemy.orm.session import Session
@@ -229,31 +229,36 @@ class FEEDataTelemetryPool(FEEDATA_BASE):  # type: ignore
 #     # return session_factory()
 
 
+def gen_mysql_conn_str(user=config_db.user, pw=config_db.pw, host=config_db.host, schema=''):
+    return engine.url.URL.create(drivername='mysql', username=user, password=pw, host=host, database=schema)
+
+#SQLSOCKET=''
+
+
 def create_storage_db(protocol='PUS', force=False):
     if protocol.upper() not in ['PUS', 'RMAP', 'FEEDATA', 'ALL']:
         print('Unsupported protocol {}. Use either "PUS", "RMAP", "FEEDATA" or "ALL".'.format(protocol))
         return
     elif protocol.upper() == 'ALL':
         print('Creating schema "{}" for {} data storage...'.format(config_db.storage_schema_name, protocol.upper()))
-        engine = create_engine(config_db.mysql_connection_string, echo="-v" in sys.argv)
+        _engine = create_engine(gen_mysql_conn_str(), echo="-v" in sys.argv)
         if force:
-            engine.execute('DROP SCHEMA IF EXISTS {}'.format(config_db.storage_schema_name))
-        engine.execute('CREATE SCHEMA IF NOT EXISTS {}'.format(config_db.storage_schema_name))
-        engine.dispose()
-        engine = create_engine(config_db.mysql_connection_string + '/' + config_db.storage_schema_name, echo="-v" in sys.argv)
+            _engine.execute('DROP SCHEMA IF EXISTS {}'.format(config_db.storage_schema_name))
+        _engine.execute('CREATE SCHEMA IF NOT EXISTS {}'.format(config_db.storage_schema_name))
+        _engine.dispose()
+        _engine = create_engine(gen_mysql_conn_str(schema=config_db.storage_schema_name), echo="-v" in sys.argv)
         for protocol in protocols:
-            protocols[protocol][1].metadata.create_all(engine)
+            protocols[protocol][1].metadata.create_all(_engine)
         print('...DONE')
     else:
         print('Creating schema "{}" for {} data storage...'.format(config_db.storage_schema_name, protocol.upper()))
-        engine = create_engine(config_db.mysql_connection_string, echo="-v" in sys.argv)
+        _engine = create_engine(gen_mysql_conn_str(), echo="-v" in sys.argv)
         if force:
-            engine.execute('DROP SCHEMA IF EXISTS {}'.format(config_db.storage_schema_name))
-        engine.execute('CREATE SCHEMA IF NOT EXISTS {}'.format(config_db.storage_schema_name))
-        engine.dispose()
-        engine = create_engine(config_db.mysql_connection_string + '/' + config_db.storage_schema_name,
-                               echo="-v" in sys.argv)
-        protocols[protocol.upper()][1].metadata.create_all(engine)
+            _engine.execute('DROP SCHEMA IF EXISTS {}'.format(config_db.storage_schema_name))
+        _engine.execute('CREATE SCHEMA IF NOT EXISTS {}'.format(config_db.storage_schema_name))
+        _engine.dispose()
+        _engine = create_engine(gen_mysql_conn_str(schema=config_db.storage_schema_name), echo="-v" in sys.argv)
+        protocols[protocol.upper()][1].metadata.create_all(_engine)
         print('...DONE')
 
 
@@ -273,8 +278,8 @@ def scoped_session_maker(db_schema, idb_version=None):
     else:
         print('DB schema must be either "idb" or "storage"')
         return
-    engine = create_engine(config_db.mysql_connection_string + '/' + schema, echo="-v" in sys.argv, pool_size=15)
-    session_factory = sessionmaker(bind=engine)
+    _engine = create_engine(gen_mysql_conn_str(schema=schema), echo="-v" in sys.argv, pool_size=15)
+    session_factory = sessionmaker(bind=_engine)
     scoped_session_factory = scoped_session(session_factory)
     return scoped_session_factory
 
-- 
GitLab