diff options
author | eugue <eug.sun@gmail.com> | 2011-02-12 20:09:41 -0500 |
---|---|---|
committer | eugue <eug.sun@gmail.com> | 2011-02-12 20:09:41 -0500 |
commit | 1e8b07e52c8b15b9bf4d9dc357f56bc8bbccc718 (patch) | |
tree | cb80c07023d8f4781d95e23f989976093f7c9d5d /util/Config.py | |
parent | 9e342041f05e88f8d1987a48fdcdc10c14ef095f (diff) | |
parent | a239c7accdc634459d2db014b8d8b6d5b78bab1b (diff) |
Merge branch 'master' of github.com:rcoh/SmootLight into behavior-factory
Diffstat (limited to 'util/Config.py')
-rw-r--r-- | util/Config.py | 15 |
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 |