def test_restore_an_object(self): d = OrderedDict([ ('parameters',OrderedDict([('c',50),('d',90),('object1','placeholder')])), ('__class__', 'coma.test.test_serialization.Class2') ]) s = Serializer(restore_objects=True, getstate='__getstate__', setstate='__setstate__') o = s.restore(d) self.assertTrue(isinstance(o, Class2)) self.assertEqual(o.c, 50) self.assertEqual(o.d, 90)
def test_restore_an_object_from_incorrect_or_incomplete_dict(self): s = Serializer(restore_objects=True, getstate='__getstate__', setstate='__setstate__') # If the dict does not have '__class__' field, it is just passed through d = OrderedDict([('parameters',OrderedDict([('a',10),('b',20)]))]) o = s.restore(d) self.assertTrue(o == d) self.assertTrue(o is d) # Nonexistent module fails d = OrderedDict([ ('parameters', OrderedDict([('a',10),('b',20)])), ('__class__', 'blub.Muh') ]) with self.assertRaises(ImportError): s.restore(d) # Nonexistent class fails d = OrderedDict([ ('parameters', OrderedDict([('a',10),('b',20)])), ('__class__', '__main__.Muh') ]) with self.assertRaises(AttributeError): s.restore(d) # Correct class, but wrong / nonexistent serialization method fails d = OrderedDict([ ('parameters', OrderedDict([('a',10),('b',20)])), ('__class__', 'coma.test.test_serialization.Class3') ]) with self.assertRaises(AttributeError): s.restore(d)
def test_serialize_numpy_arrays(self): a = numpy.array([[1,2,3],[4,5,6]]) s = Serializer() d = s.serialize(a) self.assertTrue(d.has_key('__type__')) self.assertTrue(d.has_key('shape')) self.assertTrue(d.has_key('list')) self.assertEquals(d['__type__'], 'numpy.ndarray') self.assertEquals(d['shape'], (2,3)) self.assertEquals(d['list'], [1,2,3,4,5,6])
def test_serialize_and_restore_an_object(self): s = Serializer(restore_objects=True, getstate='__getstate__', setstate='__setstate__') o1 = Class2(8,9) d = s.serialize(o1) o2 = s.restore(d) # Note that here object1 was never serialized, it was just passed # around as is. Serializing / restoring a whole object tree recursively # is not Serializer's job. self.assertTrue(isinstance(o1.object1, Class1)) self.assertTrue(isinstance(o2.object1, Class1)) self.assertEqual(o1.__dict__, o2.__dict__)
def test_use_serializer_with_config_object(self): d = OrderedDict([ ('parameters',OrderedDict([('c',50),('d',90),('object1','placeholder')])), ('__class__', 'coma.test.test_serialization.Class2') ]) c = { 'serializer_getstate': '__getstate__', 'serializer_setstate': '__setstate__' } s = Serializer(restore_objects=True, config=c) o = s.restore(d) self.assertTrue(isinstance(o, Class2)) self.assertEqual(o.c, 50) self.assertEqual(o.d, 90)
def test_serialize_an_object(self): o = Class3(3,4) s = Serializer() d = s.serialize(o) self.assertTrue(d.has_key('parameters')); self.assertTrue(d.has_key('__class__')); self.assertEqual(d['__class__'], 'coma.test.test_serialization.Class3'); p = d['parameters'] self.assertTrue(p.has_key('a')); self.assertTrue(p.has_key('b')); self.assertTrue(p.has_key('all')); self.assertEqual(p['a'], 3); self.assertEqual(p['b'], 4); self.assertEqual(p['all'], [3,4]);
def test_serialize_an_object_with_a_different_serialization_method(self): o = Class2(5,6) s = Serializer(getstate='__getstate__') d = s.serialize(o) self.assertTrue(d.has_key('parameters')); self.assertTrue(d.has_key('__class__')); self.assertEqual(d['__class__'], 'coma.test.test_serialization.Class2'); p = d['parameters'] self.assertTrue(p.has_key('c')); self.assertTrue(p.has_key('d')); self.assertTrue(p.has_key('object1')); self.assertTrue(p.has_key('all')); self.assertEqual(p['c'], 5); self.assertEqual(p['d'], 6); self.assertEqual(p['all'], [5,6]); self.assertTrue(isinstance(p['object1'], Class1));
def test_load_and_restore_class_hierarchy(self): # At least for the time being, we need to set the serializer by hand; # full object restore is not supported via the config dictionary c = { 'serializer_getstate': '__getstate__', 'serializer_setstate': '__setstate__' } s = Serializer(restore_objects=True, config=c) a = JsonArchive('testhierarchy') a.serializer = s o = a.loads(test_json['hierarchy']) self.assertEquals(o.c, 3) self.assertEquals(o.d, 4) self.assertEquals(o.object1.a, 30) self.assertEquals(o.object1.b, 40)
def test_restore_numpy_arrays(self): d = OrderedDict([ ('__type__', 'numpy.ndarray'), ('shape', [2,3]), ('list', [1,2,3,4,5,6]) ]) s = Serializer() o = s.restore(d) self.assertTrue(isinstance(o, numpy.ndarray)) self.assertTrue((o == numpy.array([[1,2,3],[4,5,6]])).all()) with self.assertRaises(ValueError): d = OrderedDict([ ('__type__', 'numpy.ndarray'), ('shape', (2,3)), ('list', [1,2,3,4,5]) ]) s = Serializer() o = s.restore(d)
def test_restore_by_default_does_nothing(self): d = OrderedDict([('parameters',OrderedDict([('a',10),('b',20)]))]) s = Serializer() o = s.restore(d) self.assertTrue(o == d) self.assertTrue(o is d)
def test_serialize_an_object_with_wrong_serialization_method_fails(self): o = Class3(3,4) s = Serializer(getstate='__getstate__') with self.assertRaises(AttributeError): s.serialize(o)