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