| import os |
| |
| class PreconfigManager(object): |
| _preconfigs = {} |
| _is_init = False |
| |
| def _get_preconfig_path(self, suffix): |
| """\ |
| Get the absolute path to a prefix directory or file. |
| |
| suffix: list of suffixes after the 'preconfigs' directory to navigate to |
| E.g., ['metrics', 'abc'] gives the path to |
| <tko>/preconfigs/metrics/abc |
| """ |
| rel_path = os.path.join(os.path.dirname(__file__), 'preconfigs', |
| *suffix) |
| return os.path.abspath(rel_path) |
| |
| |
| def _init_preconfigs(self): |
| """\ |
| Read the names of all the preconfigs from disk and store them in the |
| _preconfigs dictionary. |
| """ |
| if not self._is_init: |
| # Read the data |
| self._preconfigs['metrics'] = dict.fromkeys( |
| os.listdir(self._get_preconfig_path(['metrics']))) |
| self._preconfigs['qual'] = dict.fromkeys( |
| os.listdir(self._get_preconfig_path(['qual']))) |
| self._is_init = True |
| |
| def _read_preconfig(self, name, type): |
| """\ |
| Populate the _preconfigs dictionary entry for the preconfig described |
| by the given parameters. If the preconfig has already been loaded, |
| do nothing. |
| |
| name: specific name of the preconfig |
| type: 'metrics' or 'qual' |
| """ |
| if self._preconfigs[type][name] is not None: |
| return |
| |
| self._preconfigs[type][name] = {} |
| path = self._get_preconfig_path([type, name]) |
| config = open(path) |
| try: |
| for line in config: |
| parts = line.split(':') |
| self._preconfigs[type][name][parts[0]] = parts[1].strip() |
| finally: |
| config.close() |
| |
| |
| def get_preconfig(self, name, type): |
| self._init_preconfigs() |
| self._read_preconfig(name, type) |
| return self._preconfigs[type][name] |
| |
| |
| def all_preconfigs(self): |
| self._init_preconfigs() |
| return dict(self._preconfigs) |
| |
| |
| manager = PreconfigManager() |