diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py index 37401844aea243a9489167d84f42a20f57ae2db2..62046b21b00abbf3fa8ea9a8e33fdaebdef2f237 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py @@ -80,27 +80,25 @@ class Archiver(): except Exception as e: raise Exception("Error in selecting configuration. Archiving framework will not be updated.") from e - def get_db_config(self, device_name:str): + def get_db_config(self, device_name:str) -> dict: """ Retrieve the DB credentials from the Tango properties of Configuration Manager or EventSubscribers """ device = DeviceProxy(device_name) - config_list = device.get_property('LibConfiguration')['LibConfiguration'] # dictionary {'LibConfiguration': list of strings} - host = str([s for s in config_list if "host" in s][0].split('=')[1]) - libname = str([s for s in config_list if "libname" in s][0].split('=')[1]) - dbname = str([s for s in config_list if "dbname" in s][0].split('=')[1]) - port = str([s for s in config_list if "port" in s][0].split('=')[1]) - user = str([s for s in config_list if "user" in s][0].split('=')[1]) - pw = str([s for s in config_list if "password" in s][0].split('=')[1]) - return [host,libname,dbname,port,user,pw] + # example LibConfiguration property value: + # ['connect_string= user=postgres password=password host=archiver-timescale port=5432 dbname=hdb', 'host=archiver-timescale', 'libname=libhdb++timescale.so', 'dbname=hdb', 'port=5432', 'user=postgres', 'password=password'] + config_strs = device.get_property('LibConfiguration')['LibConfiguration'] + + config = dict(config_str.split("=",1) for config_str in config_strs) + return config def get_hdbpp_libname(self, device_name:str): """ Get the hdbpp library name used by the Configuration Manager or by the EventSubscribers Useful in the case of different DBMS architectures (e.g. MySQL, TimescaleDB) """ - config_list = self.get_db_config(device_name) - return config_list[1] + config = self.get_db_config(device_name) + return config["libname"] def get_subscribers(self, from_db:bool=False): """