aboutsummaryrefslogtreecommitdiff
path: root/util/Config.py
diff options
context:
space:
mode:
authorGravatar rcoh <rcoh@mit.edu>2011-02-12 16:40:02 -0500
committerGravatar rcoh <rcoh@mit.edu>2011-02-12 16:40:02 -0500
commit5f54bf57128dbca04a9325670a6ad1e03097d5cb (patch)
treef7d5a94975c842cec497dd8b301830fd5a30f7e9 /util/Config.py
parent1604f05ec0bad79798bbd764cd62bdb20e55f444 (diff)
parentcf1048df72b845ef7fefd5ec5709f7d1b2c4df79 (diff)
Merge branch 'objprops'
Conflicts: Profile.py
Diffstat (limited to 'util/Config.py')
-rw-r--r--util/Config.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/util/Config.py b/util/Config.py
index 6fdb0d4..25018a8 100644
--- a/util/Config.py
+++ b/util/Config.py
@@ -1,4 +1,5 @@
from xml.etree.ElementTree import *
+import re
import sys
import xml
import pdb
@@ -112,8 +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:
- val = eval(val)
+ if '${' in val and '}$' in val: #TODO: this could be a little cleaner
+ 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 can be
+ #resolved dynamically.
+ else:
+ val = eval(val)
except (NameError, SyntaxError):
val = str(val)
return val