diff options
author | Florian Dold <florian.dold@gmail.com> | 2016-04-26 00:20:35 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2016-04-26 00:20:35 +0200 |
commit | 9b6c4664d025fc242864eb61d5e5cbed8be0755d (patch) | |
tree | e72c5508f409691168f7694883c8507fbc3d8cfb /talerbank/talerconfig.py | |
parent | 7056fcd35016b5bd0f4106fdcfbc31531124cbbb (diff) | |
download | bank-9b6c4664d025fc242864eb61d5e5cbed8be0755d.tar.gz bank-9b6c4664d025fc242864eb61d5e5cbed8be0755d.tar.bz2 bank-9b6c4664d025fc242864eb61d5e5cbed8be0755d.zip |
replace variables without parentheses
Diffstat (limited to 'talerbank/talerconfig.py')
-rw-r--r-- | talerbank/talerconfig.py | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/talerbank/talerconfig.py b/talerbank/talerconfig.py index 9216869..80dd82a 100644 --- a/talerbank/talerconfig.py +++ b/talerbank/talerconfig.py @@ -51,33 +51,45 @@ def expand(s, getter): Supported syntax: - ${X} - ${X:-Y} + - $X """ pos = 0 result = "" while pos != -1: - start = s.find("${", pos) + start = s.find("$", pos) if start == -1: break - balance = 1 - end = start + 2 - while balance > 0 and end < len(s): - balance += {"{": 1, "}": -1}.get(s[end], 0) - end += 1 - if balance != 0: - raise ExpansionSyntaxError("unbalanced parentheses") - piece = s[start+2:end-1] - if piece.find(":-") > 0: - varname, alt = piece.split(":-", 1) - replace = getter(varname) - if replace is None: - replace = expand(alt, getter) + if s[start:].startswith("${"): + balance = 1 + end = start + 2 + while balance > 0 and end < len(s): + balance += {"{": 1, "}": -1}.get(s[end], 0) + end += 1 + if balance != 0: + raise ExpansionSyntaxError("unbalanced parentheses") + piece = s[start+2:end-1] + if piece.find(":-") > 0: + varname, alt = piece.split(":-", 1) + replace = getter(varname) + if replace is None: + replace = expand(alt, getter) + else: + varname = piece + replace = getter(varname) + if replace is None: + replace = s[start:end] else: - varname = piece + end = start + 1 + while end < len(s) and s[start+1:end].isalnum(): + end += 1 + varname = s[start+1:end] replace = getter(varname) if replace is None: replace = s[start:end] result = result + replace pos = end + + return result + s[pos:] @@ -192,13 +204,13 @@ class TalerConfig: cfg.load_file(filename) return cfg - def value_string(section, option, default=None, required=None, warn=False): + def value_string(self, section, option, default=None, required=None, warn=False): return self.sections[section][option].value_string(default, required, warn) - def value_filename(section, option, default=None, required=None, warn=False): + def value_filename(self, section, option, default=None, required=None, warn=False): return self.sections[section][option].value_filename(default, required, warn) - def value_int(section, option, default=None, required=None, warn=False): + def value_int(self, section, option, default=None, required=None, warn=False): return self.sections[section][option].value_int(default, required, warn) def load_defaults(self): |