You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
7 months ago
|
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()
|