summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUltrabug <ultrabug@gentoo.org>2014-12-28 18:34:04 +0100
committerUltrabug <ultrabug@gentoo.org>2014-12-28 18:34:04 +0100
commitf23ce2707e497b48525b2eaaad39ea67ec19fc85 (patch)
tree40222f8ff2539913f1a06c5be4ecc18696526b4b
parent2c532eefde194cd00ccdf8f939fb59ec3348449d (diff)
enhance parsing of modules and section names and parameters value
-rwxr-xr-xpy3status/__init__.py46
1 files changed, 32 insertions, 14 deletions
diff --git a/py3status/__init__.py b/py3status/__init__.py
index 1aff611..7b0760d 100755
--- a/py3status/__init__.py
+++ b/py3status/__init__.py
@@ -124,18 +124,40 @@ class I3status(Thread):
it properly. This is used to parse i3status configuration parameters
such as 'disk "/home" {}' or worse like '"cpu_temperature" 0 {}'.
"""
+ params = param.split(' ')
+ result_list = list()
+
+ for p in params:
+ try:
+ e_value = eval(p)
+ if isinstance(e_value, str) or isinstance(e_value, int):
+ p = str(e_value)
+ else:
+ raise ValueError()
+ except (NameError, SyntaxError, ValueError):
+ pass
+ finally:
+ result_list.append(p)
+
+ return ' '.join(result_list)
+
+ @staticmethod
+ def eval_config_value(value):
+ """
+ Try to evaluate the given parameter as a string or integer and return
+ it properly. This is used to parse i3status configuration parameters
+ such as 'disk "/home" {}' or worse like '"cpu_temperature" 0 {}'.
+ """
try:
- e_value = eval(param)
+ e_value = eval(value)
if isinstance(e_value, str) or isinstance(e_value, int):
- param = e_value
+ value = e_value
else:
raise ValueError()
- except NameError:
- pass
- except ValueError:
+ except (NameError, ValueError):
pass
finally:
- return param
+ return value
def i3status_config_reader(self, i3status_config_path):
"""
@@ -173,6 +195,7 @@ class I3status(Thread):
if not in_section:
section_name = line.split('{')[0].strip()
+ section_name = self.eval_config_parameter(section_name)
if section_name not in config:
config[section_name] = {}
@@ -183,8 +206,10 @@ class I3status(Thread):
line = line.split('}')[0].strip()
key = line.split('=')[0].strip()
+ key = self.eval_config_parameter(key)
+
value = line.split('=')[1].strip()
- value = self.eval_config_parameter(value)
+ value = self.eval_config_value(value)
if section_name == 'order':
config[section_name].append(value)
@@ -197,13 +222,6 @@ class I3status(Thread):
config['i3s_modules'].append(value)
else:
if not key.startswith('on_click'):
- if ' ' in key:
- m, i = key.split(' ', 1)
- m = self.eval_config_parameter(m)
- i = self.eval_config_parameter(i)
- key = '{} {}'.format(m, i)
- else:
- key = self.eval_config_parameter(key)
config[section_name][key] = value
else:
# on_click special parameters