Use different environment's evaluation according to context of evaluation

This commit is contained in:
Nicolas Évrard committed 2011-05-17 15:21:04 +02:00
1 parent 3db5f357eb
commit 396032dd3c
2 files changed
+8 -3

No files matched your search

+7 -2
View File
@@ -4,15 +4,20 @@
class EvalEnvironment(dict):
def __init__(self, parent, check_load):
def __init__(self, parent, check_load, eval_type='eval'):
super(EvalEnvironment, self).__init__()
self.parent = parent
self.check_load = check_load
assert eval_type in ('eval', 'on_change')
self.eval_type = eval_type
def __getitem__(self, item):
if item == '_parent_' + self.parent.parent_name and self.parent.parent:
return EvalEnvironment(self.parent.parent, self.check_load)
return self.parent.get_eval(check_load=self.check_load)[item]
if self.eval_type == 'eval':
return self.parent.get_eval(check_load=self.check_load)[item]
else:
return self.parent._get_on_change_args([item])[item]
def __getattr__(self, item):
return self.__getitem__(item)
+1 -1
View File
@@ -434,7 +434,7 @@ class Record(SignalEvent):
values[name] = field.get_on_change_value(self, check_load=False)
if self.parent and self.parent_name:
values['_parent_' + self.parent_name] = \
common.EvalEnvironment(self.parent, False)
common.EvalEnvironment(self.parent, False, 'on_change')
for arg in args:
scope = values
for i in arg.split('.'):