def test_impure_execute(): code=""" import os # module and function names are discarded by default. def ff(): global y # will not be retained but will be available in the code block. y = a + x b.append(4) x = a b.append(3) ff() z = y _x = x # names beginning with underscore are discarded by default a = 99 """ context = DataContext(subcontext=dict(a=1,b=[2])) block = Block(code) # by default, clean shadow after execution: shadow = block.execute_impure(context) assert_equal(set(context.keys()), set(['a', 'b'])) # names unchanged assert_equal(context['b'], [2,3,4]) # mutable object was changed in context assert_equal(set(shadow.keys()), set(['x', 'z', 'a'])) assert_equal(context['a'], 1) # original mutable object does not change, assert_equal(shadow['a'], 99) # but the new object is in the shadow dict. # do not clean shadow after execution: shadow = block.execute_impure(context, clean_shadow=False) assert_equal(set(shadow.keys()), set(['x', 'z', 'a', '_x', 'os', 'ff']))
def test_impure_execute(): raise SkipTest code = """ import os # module and function names are discarded by default. def ff(): global y # will not be retained but will be available in the code block. y = a + x b.append(4) x = a b.append(3) ff() z = y _x = x # names beginning with underscore are discarded by default a = 99 """ context = DataContext(subcontext=dict(a=1, b=[2])) block = Block(code) # by default, clean shadow after execution: shadow = block.execute_impure(context) assert_equal(set(context.keys()), set(['a', 'b'])) # names unchanged assert_equal(context['b'], [2, 3, 4]) # mutable object was changed in context assert_equal(set(shadow.keys()), set(['x', 'z', 'a'])) assert_equal(context['a'], 1) # original mutable object does not change, assert_equal(shadow['a'], 99) # but the new object is in the shadow dict. # do not clean shadow after execution: shadow = block.execute_impure(context, clean_shadow=False) assert_equal(set(shadow.keys()), set(['x', 'z', 'a', '_x', 'os', 'ff']))