From feacaef74a5755fab071c39bffbade02b62d402b Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Fri, 17 Dec 2021 14:49:48 +0100 Subject: [PATCH] L2SS-544: Improve LibConfiguration parsing, and return a dict instead of list to avoid needing to use indices to indicate specific values --- .../tangostationcontrol/toolkit/archiver.py | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py index 37401844a..62046b21b 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): """ -- GitLab