aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorGravatar rcoh <rcoh@mit.edu>2011-02-09 12:14:27 -0500
committerGravatar rcoh <rcoh@mit.edu>2011-02-09 12:14:27 -0500
commitb45b9079c5decd720d8275378bb0d6dc172c6234 (patch)
tree9e8df9308191bb687d14c3df8bb5078b51ba6059 /util
parent03d08792f437e1ce93dc0cbfa997025029c8e74e (diff)
Early stages of support for interbehavior interactions. Fixed a bug in the config eval and added
some new tests.
Diffstat (limited to 'util')
-rw-r--r--util/Config.py13
1 files changed, 8 insertions, 5 deletions
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