From b45b9079c5decd720d8275378bb0d6dc172c6234 Mon Sep 17 00:00:00 2001 From: rcoh Date: Wed, 9 Feb 2011 12:14:27 -0500 Subject: Early stages of support for interbehavior interactions. Fixed a bug in the config eval and added some new tests. --- util/Config.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'util') diff --git a/util/Config.py b/util/Config.py index 4153313..25018a8 100644 --- a/util/Config.py +++ b/util/Config.py @@ -113,17 +113,20 @@ def pullArgsFromItem(parentNode): return args def attemptEval(val): + """Runs an eval if possible, or converts into a lambda expression if indicated. Otherwise, + leaves as a string.""" try: if '${' in val and '}$' in val: #TODO: this could be a little cleaner - dictVal = re.sub("'\$\{(.+)\}\$'", "b['\\1']", val) #replace all expressions like {blah} with a['blah'] - dictVal = re.sub("\$\{(.+)\}\$", "a['\\1']", dictVal) #replace all expressions like {blah} with a['blah'] + dictVal = re.sub("'\$\{(.+?)\}\$'", "b['\\1']", val) #replace expressions '${blah}$' with b['blah'] + dictVal = re.sub("\$\{(.+?)\}\$", "a['\\1']", dictVal) #replace all expressions like {blah} with a['blah'] if "'${" and "}$'" in val: #nested lambda madness lambdaVal = eval('lambda a: lambda b: ' + dictVal) else: lambdaVal = eval('lambda a:'+dictVal) #TODO: nested lambdas - return lambdaVal #convert referential objects to lambda expressions which resolve - #dynamically - val = eval(val) + return lambdaVal #convert referential objects to lambda expressions which can be + #resolved dynamically. + else: + val = eval(val) except (NameError, SyntaxError): val = str(val) return val -- cgit v1.2.3