1*9c5db199SXin Liimport os 2*9c5db199SXin Li 3*9c5db199SXin Liclass PreconfigManager(object): 4*9c5db199SXin Li _preconfigs = {} 5*9c5db199SXin Li _is_init = False 6*9c5db199SXin Li 7*9c5db199SXin Li def _get_preconfig_path(self, suffix): 8*9c5db199SXin Li """\ 9*9c5db199SXin Li Get the absolute path to a prefix directory or file. 10*9c5db199SXin Li 11*9c5db199SXin Li suffix: list of suffixes after the 'preconfigs' directory to navigate to 12*9c5db199SXin Li E.g., ['metrics', 'abc'] gives the path to 13*9c5db199SXin Li <tko>/preconfigs/metrics/abc 14*9c5db199SXin Li """ 15*9c5db199SXin Li rel_path = os.path.join(os.path.dirname(__file__), 'preconfigs', 16*9c5db199SXin Li *suffix) 17*9c5db199SXin Li return os.path.abspath(rel_path) 18*9c5db199SXin Li 19*9c5db199SXin Li 20*9c5db199SXin Li def _init_preconfigs(self): 21*9c5db199SXin Li """\ 22*9c5db199SXin Li Read the names of all the preconfigs from disk and store them in the 23*9c5db199SXin Li _preconfigs dictionary. 24*9c5db199SXin Li """ 25*9c5db199SXin Li if not self._is_init: 26*9c5db199SXin Li # Read the data 27*9c5db199SXin Li self._preconfigs['metrics'] = dict.fromkeys( 28*9c5db199SXin Li os.listdir(self._get_preconfig_path(['metrics']))) 29*9c5db199SXin Li self._preconfigs['qual'] = dict.fromkeys( 30*9c5db199SXin Li os.listdir(self._get_preconfig_path(['qual']))) 31*9c5db199SXin Li self._is_init = True 32*9c5db199SXin Li 33*9c5db199SXin Li def _read_preconfig(self, name, type): 34*9c5db199SXin Li """\ 35*9c5db199SXin Li Populate the _preconfigs dictionary entry for the preconfig described 36*9c5db199SXin Li by the given parameters. If the preconfig has already been loaded, 37*9c5db199SXin Li do nothing. 38*9c5db199SXin Li 39*9c5db199SXin Li name: specific name of the preconfig 40*9c5db199SXin Li type: 'metrics' or 'qual' 41*9c5db199SXin Li """ 42*9c5db199SXin Li if self._preconfigs[type][name] is not None: 43*9c5db199SXin Li return 44*9c5db199SXin Li 45*9c5db199SXin Li self._preconfigs[type][name] = {} 46*9c5db199SXin Li path = self._get_preconfig_path([type, name]) 47*9c5db199SXin Li config = open(path) 48*9c5db199SXin Li try: 49*9c5db199SXin Li for line in config: 50*9c5db199SXin Li parts = line.split(':') 51*9c5db199SXin Li self._preconfigs[type][name][parts[0]] = parts[1].strip() 52*9c5db199SXin Li finally: 53*9c5db199SXin Li config.close() 54*9c5db199SXin Li 55*9c5db199SXin Li 56*9c5db199SXin Li def get_preconfig(self, name, type): 57*9c5db199SXin Li self._init_preconfigs() 58*9c5db199SXin Li self._read_preconfig(name, type) 59*9c5db199SXin Li return self._preconfigs[type][name] 60*9c5db199SXin Li 61*9c5db199SXin Li 62*9c5db199SXin Li def all_preconfigs(self): 63*9c5db199SXin Li self._init_preconfigs() 64*9c5db199SXin Li return dict(self._preconfigs) 65*9c5db199SXin Li 66*9c5db199SXin Li 67*9c5db199SXin Limanager = PreconfigManager() 68