From 3f1ab87f02b723505a97f228b1db18bcb0f27591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Tue, 2 Jun 2015 10:59:53 +0200 Subject: [PATCH] variables: added missed source file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jaroslav Škarvada --- tuned/profiles/variables.py | 65 +++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tuned/profiles/variables.py diff --git a/tuned/profiles/variables.py b/tuned/profiles/variables.py new file mode 100644 index 0000000..97c938c --- /dev/null +++ b/tuned/profiles/variables.py @@ -0,0 +1,65 @@ +import os +import re +import tuned.logs +import tuned.consts as consts +from tuned.utils.commands import commands +from configobj import ConfigObj + +log = tuned.logs.get() + +class Variables(): + """ + Storage and processing of variables used in profiles + """ + + def __init__(self): + self._cmd = commands() + self._lookup_re = {} + self._lookup_env = {} + + def _add_env_prefix(self, s, prefix): + if s.find(prefix) == 0: + return s + return prefix + s + + def add_variable(self, variable, value): + if value is None: + return + s = str(variable) + v = self.expand(value) + self._lookup_re[r'\$' + re.escape(s) + r'\b'] = v + self._lookup_env[self._add_env_prefix(s, consts.ENV_PREFIX)] = v + + def add_dict(self, d): + for item in d: + self.add_variable(item, d[item]) + + def add_from_file(self, filename): + if not os.path.exists(filename): + log.error("unable to find variables_file: '%s'" % filename) + return + try: + config = ConfigObj(filename, raise_errors = True) + except ConfigObjError: + log.error("error parsing variables_file: '%s'" % filename) + return + for item in config: + if isinstance(config[item], dict): + self.add_dict(config[item]) + else: + self.add_variable(item, config[item]) + + def add_from_cfg(self, cfg, dir_name): + for item in cfg: + if str(item) == "include": + self.add_from_file(os.path.normpath(os.path.join(dir_name, cfg[item]))) + else: + self.add_variable(item, cfg[item]) + + def expand(self, value): + if value is None: + return None + return self._cmd.multiple_re_replace(self._lookup_re, str(value)) + + def get_env(self): + return self._lookup_env