Revert "In expand, drop the unnecessary second regular expression match"
This reverts commit 05462fa7908fc22988b3dc9d376798d0a46ccb5a. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
parent
d217bedd32
commit
50006b49fc
|
@ -37,6 +37,7 @@ from bb.COW import COWDictBase
|
||||||
__setvar_keyword__ = ["_append", "_prepend"]
|
__setvar_keyword__ = ["_append", "_prepend"]
|
||||||
__setvar_regexp__ = re.compile('(?P<base>.*?)(?P<keyword>_append|_prepend)(_(?P<add>.*))?')
|
__setvar_regexp__ = re.compile('(?P<base>.*?)(?P<keyword>_append|_prepend)(_(?P<add>.*))?')
|
||||||
__expand_var_regexp__ = re.compile(r"\${[^{}]+}")
|
__expand_var_regexp__ = re.compile(r"\${[^{}]+}")
|
||||||
|
__expand_python_regexp__ = re.compile(r"\${@.+?}")
|
||||||
|
|
||||||
|
|
||||||
class DataSmart:
|
class DataSmart:
|
||||||
|
@ -50,25 +51,23 @@ class DataSmart:
|
||||||
self.expand_cache = {}
|
self.expand_cache = {}
|
||||||
|
|
||||||
def expand(self, s, varname):
|
def expand(self, s, varname):
|
||||||
def python_sub(code):
|
|
||||||
codeobj = compile(code.strip(), varname or "<expansion>", "eval")
|
|
||||||
value = utils.better_eval(codeobj, {"d": self})
|
|
||||||
return str(value)
|
|
||||||
|
|
||||||
def var_sub(match):
|
def var_sub(match):
|
||||||
key = match.group()[2:-1]
|
key = match.group()[2:-1]
|
||||||
if key[0] == "@":
|
if varname and key:
|
||||||
return python_sub(key[1:])
|
if varname == key:
|
||||||
|
raise Exception("variable %s references itself!" % varname)
|
||||||
if varname == key:
|
|
||||||
raise Exception("variable %s references itself!" % varname)
|
|
||||||
|
|
||||||
var = self.getVar(key, 1)
|
var = self.getVar(key, 1)
|
||||||
if var is not None:
|
if var is not None:
|
||||||
return var
|
return var
|
||||||
else:
|
else:
|
||||||
return match.group()
|
return match.group()
|
||||||
|
|
||||||
|
def python_sub(match):
|
||||||
|
code = match.group()[3:-1]
|
||||||
|
codeobj = compile(code.strip(), varname or "<expansion>", "eval")
|
||||||
|
value = utils.better_eval(codeobj, {"d": self})
|
||||||
|
return str(value)
|
||||||
|
|
||||||
if not isinstance(s, basestring): # sanity check
|
if not isinstance(s, basestring): # sanity check
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
@ -79,6 +78,7 @@ class DataSmart:
|
||||||
olds = s
|
olds = s
|
||||||
try:
|
try:
|
||||||
s = __expand_var_regexp__.sub(var_sub, s)
|
s = __expand_var_regexp__.sub(var_sub, s)
|
||||||
|
s = __expand_python_regexp__.sub(python_sub, s)
|
||||||
if s == olds:
|
if s == olds:
|
||||||
break
|
break
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
|
Loading…
Reference in New Issue