1 2import yaml 3 4class AnInstance: 5 6 def __init__(self, foo, bar): 7 self.foo = foo 8 self.bar = bar 9 10 def __repr__(self): 11 try: 12 return "%s(foo=%r, bar=%r)" % (self.__class__.__name__, 13 self.foo, self.bar) 14 except RuntimeError: 15 return "%s(foo=..., bar=...)" % self.__class__.__name__ 16 17class AnInstanceWithState(AnInstance): 18 19 def __getstate__(self): 20 return {'attributes': [self.foo, self.bar]} 21 22 def __setstate__(self, state): 23 self.foo, self.bar = state['attributes'] 24 25def test_recursive(recursive_filename, verbose=False): 26 context = globals().copy() 27 exec(open(recursive_filename, 'rb').read(), context) 28 value1 = context['value'] 29 output1 = None 30 value2 = None 31 output2 = None 32 try: 33 output1 = yaml.dump(value1) 34 value2 = yaml.unsafe_load(output1) 35 output2 = yaml.dump(value2) 36 assert output1 == output2, (output1, output2) 37 finally: 38 if verbose: 39 print("VALUE1:", value1) 40 print("VALUE2:", value2) 41 print("OUTPUT1:") 42 print(output1) 43 print("OUTPUT2:") 44 print(output2) 45 46test_recursive.unittest = ['.recursive'] 47 48if __name__ == '__main__': 49 import test_appliance 50 test_appliance.run(globals()) 51 52