Esempio n. 1
0
    def testNumpyDtypeJSONSerialize(self):
        provider = JsonSerializeProvider()

        node9 = Node9(b1=np.int8(-2),
                      b2=np.int16(2000),
                      b3=np.int32(-5000),
                      b4=np.int64(500000),
                      c1=np.uint8(2),
                      c2=np.uint16(2000),
                      c3=np.uint32(5000),
                      c4=np.uint64(500000),
                      d1=np.float16(2.5),
                      d2=np.float32(7.37),
                      d3=np.float64(5.976321),
                      f1=np.int8(3))

        serials = serializes(provider, [node9])
        d_node9, = deserializes(provider, [Node9], serials)

        self.assertIsNot(node9, d_node9)
        self.assertEqual(node9.b1, d_node9.b1)
        self.assertEqual(node9.b2, d_node9.b2)
        self.assertEqual(node9.b3, d_node9.b3)
        self.assertEqual(node9.b4, d_node9.b4)
        self.assertEqual(node9.c1, d_node9.c1)
        self.assertEqual(node9.c2, d_node9.c2)
        self.assertEqual(node9.c3, d_node9.c3)
        self.assertEqual(node9.c4, d_node9.c4)
        self.assertAlmostEqual(node9.d1, d_node9.d1, places=2)
        self.assertAlmostEqual(node9.d2, d_node9.d2, places=4)
        self.assertAlmostEqual(node9.d3, d_node9.d3)
        self.assertEqual(node9.f1, d_node9.f1)

        node_rec1 = Node9(f1=np.dtype([('label', 'int32'), (
            's0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), (
                'd0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3',
                                                                  '<U256')]))
        node_rec2 = Node9(f1=np.dtype([('label', 'int32'), (
            's0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), (
                's3', '<U256'), ('d0',
                                 '<U16'), ('d1',
                                           'int32'), ('d2',
                                                      'int32'), ('d3',
                                                                 '<U256')]))

        serials = serializes(provider, [node_rec1])
        d_node_rec1, = deserializes(provider, [Node9], serials)

        self.assertIsNot(node_rec1, d_node_rec1)
        self.assertEqual(node_rec1.f1, d_node_rec1.f1)

        serials = serializes(provider, [node_rec2])
        d_node_rec2, = deserializes(provider, [Node9], serials)

        self.assertIsNot(node_rec2, d_node_rec2)
        self.assertEqual(node_rec2.f1, d_node_rec2.f1)
Esempio n. 2
0
    def testAttributeAsDict(self):
        node4 = Node4(a=to_binary('中文'),
                      b=np.random.randint(4, size=(3, 4)),
                      c=np.datetime64(datetime.datetime.now()),
                      d=np.timedelta64(datetime.timedelta(seconds=1234)),
                      e=np.dtype('int'),
                      f={'a': [True, False, False], 'd': [False, None]},
                      h=(1234, to_text('测试'), '属性', None, np.datetime64('1066-10-13'),
                         np.timedelta64(1, 'D'), np.dtype([('x', 'i4'), ('y', 'f4')])),
                      i=(slice(10), slice(0, 2), None, slice(2, 0, -1)),
                      j=Node5(a='aa'),
                      k=[Node5(a='bb'), None],
                      l=Node6(b=3, nid=1))

        pbs = ProtobufSerializeProvider()

        serial = node4.serialize(pbs)
        d_node4 = Node4.deserialize(pbs, serial)

        self.assertEqual(node4.a, d_node4.a)
        self.assertTrue(np.array_equal(node4.b, d_node4.b))
        self.assertEqual(node4.c, d_node4.c)
        self.assertEqual(node4.d, d_node4.d)
        self.assertEqual(node4.e, d_node4.e)
        self.assertEqual(node4.f, d_node4.f)
        self.assertFalse(hasattr(d_node4, 'g'))
        self.assertEqual(node4.h, d_node4.h)
        self.assertEqual(node4.i, d_node4.i)
        self.assertEqual(node4.j.a, d_node4.j.a)
        self.assertEqual(node4.k[0].a, d_node4.k[0].a)
        self.assertIsNone(d_node4.k[1])
        self.assertIsInstance(d_node4.l, Node7)
        self.assertEqual(d_node4.l.b, 3)

        jss = JsonSerializeProvider()

        serial = node4.serialize(jss)
        serial = json.loads(json.dumps(serial), object_hook=OrderedDict)
        d_node4 = Node4.deserialize(jss, serial)

        self.assertEqual(node4.a, d_node4.a)
        self.assertTrue(np.array_equal(node4.b, d_node4.b))
        self.assertEqual(node4.c, d_node4.c)
        self.assertEqual(node4.d, d_node4.d)
        self.assertEqual(node4.e, d_node4.e)
        self.assertEqual(node4.f, d_node4.f)
        self.assertFalse(hasattr(d_node4, 'g'))
        self.assertEqual(node4.h, d_node4.h)
        self.assertEqual(node4.i, d_node4.i)
        self.assertEqual(node4.j.a, d_node4.j.a)
        self.assertEqual(node4.k[0].a, d_node4.k[0].a)
        self.assertIsNone(d_node4.k[1])
        self.assertIsInstance(d_node4.l, Node7)
        self.assertEqual(d_node4.l.b, 3)
Esempio n. 3
0
    def testException(self):
        node1 = Node1(h=[object()])

        pbs = ProtobufSerializeProvider()

        with self.assertRaises(TypeError):
            node1.serialize(pbs)

        jss = JsonSerializeProvider()

        with self.assertRaises(TypeError):
            node1.serialize(jss)
Esempio n. 4
0
    def testJSONSerialize(self):
        provider = JsonSerializeProvider()

        node2 = Node2(a=[['ss'], ['dd']], data=[3, 7, 212])
        node1 = Node1(a='test1',
                      b1=2, b2=2000, b3=5000, b4=500000,
                      c1=2, c2=2000, c3=5000, c4=500000,
                      d1=2.5, d2=7.37, d3=5.976321,
                      e=False,
                      f=node2,
                      g=Node2(a=[['1', '2'], ['3', '4']]),
                      h=[[2, 3], node2, True, {1: node2}, np.datetime64('1066-10-13'), np.timedelta64(1, 'D')],
                      i=[Node8(b1=111), Node8(b1=222)])
        node3 = Node3(value=node1)

        serials = serializes(provider, [node2, node3])
        serials = [json.loads(json.dumps(s), object_hook=OrderedDict) for s in serials]
        d_node2, d_node3 = deserializes(provider, [Node2, Node3], serials)

        self.assertIsNot(node2, d_node2)
        self.assertEqual(node2.a, d_node2.a)
        self.assertEqual(node2.data, d_node2.data)

        self.assertIsNot(node3, d_node3)
        self.assertIsInstance(d_node3.value, Node8)
        self.assertIsNot(node3.value, d_node3.value)
        self.assertEqual(node3.value.a, d_node3.value.a)
        self.assertEqual(node3.value.b1, d_node3.value.b1)
        self.assertEqual(node3.value.b2, d_node3.value.b2)
        self.assertEqual(node3.value.b3, d_node3.value.b3)
        self.assertEqual(node3.value.b4, d_node3.value.b4)
        self.assertEqual(node3.value.c1, d_node3.value.c1)
        self.assertEqual(node3.value.c2, d_node3.value.c2)
        self.assertEqual(node3.value.c3, d_node3.value.c3)
        self.assertEqual(node3.value.c4, d_node3.value.c4)
        self.assertAlmostEqual(node3.value.d1, d_node3.value.d1, places=2)
        self.assertAlmostEqual(node3.value.d2, d_node3.value.d2, places=4)
        self.assertAlmostEqual(node3.value.d3, d_node3.value.d3)
        self.assertEqual(node3.value.e, d_node3.value.e)
        self.assertIsNot(node3.value.f, d_node3.value.f)
        self.assertEqual(node3.value.f.a, d_node3.value.f.a)
        self.assertIsNot(node3.value.g, d_node3.value.g)
        self.assertEqual(node3.value.g.a, d_node3.value.g.a)
        self.assertEqual(node3.value.h[0], d_node3.value.h[0])
        self.assertNotIsInstance(d_node3.value.h[1], six.string_types)
        self.assertIs(d_node3.value.h[1], d_node3.value.f)
        self.assertEqual(node3.value.h[2], True)
        self.assertEqual([n.b1 for n in node3.value.i], [n.b1 for n in d_node3.value.i])
        self.assertIsInstance(d_node3.value.i[0], Node8)

        with self.assertRaises(ValueError):
            serializes(provider, [Node3(value='sth else')])
Esempio n. 5
0
    def testNumpyDtypeJSONSerialize(self):
        for serial_type in self._get_serial_types():
            provider = JsonSerializeProvider(
                data_serial_type=serial_type, pickle_protocol=TEST_PICKLE_PROTOCOL)

            node9 = Node9(b1=np.int8(-2), b2=np.int16(2000), b3=np.int32(-5000), b4=np.int64(500000),
                          c1=np.uint8(2), c2=np.uint16(2000), c3=np.uint32(5000), c4=np.uint64(500000),
                          d1=np.float16(2.5), d2=np.float32(7.37), d3=np.float64(5.976321),
                          f1=np.int8(3))

            serials = serializes(provider, [node9])
            d_node9, = deserializes(provider, [Node9], serials)

            self.assertIsNot(node9, d_node9)
            self.assertEqual(node9.b1, d_node9.b1)
            self.assertEqual(node9.b2, d_node9.b2)
            self.assertEqual(node9.b3, d_node9.b3)
            self.assertEqual(node9.b4, d_node9.b4)
            self.assertEqual(node9.c1, d_node9.c1)
            self.assertEqual(node9.c2, d_node9.c2)
            self.assertEqual(node9.c3, d_node9.c3)
            self.assertEqual(node9.c4, d_node9.c4)
            self.assertAlmostEqual(node9.d1, d_node9.d1, places=2)
            self.assertAlmostEqual(node9.d2, d_node9.d2, places=4)
            self.assertAlmostEqual(node9.d3, d_node9.d3)
            self.assertEqual(node9.f1, d_node9.f1)

            node_rec1 = Node9(f1=np.dtype([('label', 'int32'),
                                           ('s0', '<U16'), ('s1', 'int32'), ('s2', 'int32'),
                                           ('d0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3', '<U256')]))
            node_rec2 = Node9(f1=np.dtype([('label', 'int32'),
                                           ('s0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), ('s3', '<U256'),
                                           ('d0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3', '<U256')]))

            serials = serializes(provider, [node_rec1])
            loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \
                else original_pickle_loads
            with unittest.mock.patch('pickle.loads', new=loads_fun):
                d_node_rec1, = deserializes(provider, [Node9], serials)

            self.assertIsNot(node_rec1, d_node_rec1)
            self.assertEqual(node_rec1.f1, d_node_rec1.f1)

            serials = serializes(provider, [node_rec2])
            loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \
                else original_pickle_loads
            with unittest.mock.patch('pickle.loads', new=loads_fun):
                d_node_rec2, = deserializes(provider, [Node9], serials)

            self.assertIsNot(node_rec2, d_node_rec2)
            self.assertEqual(node_rec2.f1, d_node_rec2.f1)
Esempio n. 6
0
    def testException(self):
        class Unserializable:
            def __getstate__(self):
                raise SystemError

        node1 = Node1(h=[Unserializable()])

        pbs = ProtobufSerializeProvider()

        with self.assertRaises(TypeError):
            node1.serialize(pbs)

        jss = JsonSerializeProvider()

        with self.assertRaises(TypeError):
            node1.serialize(jss)
Esempio n. 7
0
    def testAttributeAsDict(self):
        other_data = {}
        if pd:
            df = pd.DataFrame(
                {
                    'a': [1, 2, 3],
                    'b': [to_text('测试'), to_binary('属性'), 'c']
                },
                index=[[0, 0, 1], ['测试', '属性', '测试']])
            other_data['m'] = df.columns
            other_data['mm'] = df.index
            other_data['n'] = df['b']
            other_data['o'] = df
            other_data['p'] = [df.columns, df.index, df['a'], df]
        node4 = Node4(a=to_binary('中文'),
                      b=np.random.randint(4, size=(3, 4)),
                      c=np.datetime64(datetime.datetime.now()),
                      d=np.timedelta64(datetime.timedelta(seconds=1234)),
                      e=np.dtype('int'),
                      f={
                          'a': [True, False, False],
                          'd': [False, None]
                      },
                      h=(1234, to_text('测试'), '属性', None,
                         np.datetime64('1066-10-13'), np.timedelta64(1, 'D'),
                         np.dtype([('x', 'i4'), ('y', 'f4')])),
                      i=(slice(10), slice(0, 2), None, slice(2, 0, -1)),
                      j=Node5(a='aa'),
                      k=[Node5(a='bb'), None],
                      l=Node6(b=3, nid=1),
                      **other_data)

        pbs = ProtobufSerializeProvider()

        serial = node4.serialize(pbs)
        d_node4 = Node4.deserialize(pbs, serial)

        self.assertEqual(node4.a, d_node4.a)
        np.testing.assert_array_equal(node4.b, d_node4.b)
        self.assertEqual(node4.c, d_node4.c)
        self.assertEqual(node4.d, d_node4.d)
        self.assertEqual(node4.e, d_node4.e)
        self.assertEqual(node4.f, d_node4.f)
        self.assertFalse(hasattr(d_node4, 'g'))
        self.assertEqual(node4.h, d_node4.h)
        self.assertEqual(node4.i, d_node4.i)
        self.assertEqual(node4.j.a, d_node4.j.a)
        self.assertEqual(node4.k[0].a, d_node4.k[0].a)
        self.assertIsNone(d_node4.k[1])
        self.assertIsInstance(d_node4.l, Node7)
        self.assertEqual(d_node4.l.b, 3)
        if pd:
            pd.testing.assert_index_equal(node4.m, d_node4.m)
            pd.testing.assert_index_equal(node4.mm, d_node4.mm)
            pd.testing.assert_series_equal(node4.n, d_node4.n)
            pd.testing.assert_frame_equal(node4.o, d_node4.o)
            pd.testing.assert_index_equal(node4.p[0], d_node4.p[0])
            pd.testing.assert_index_equal(node4.p[1], d_node4.p[1])
            pd.testing.assert_series_equal(node4.p[2], d_node4.p[2])
            pd.testing.assert_frame_equal(node4.p[3], d_node4.p[3])

        jss = JsonSerializeProvider()

        serial = node4.serialize(jss)
        serial = json.loads(json.dumps(serial), object_hook=OrderedDict)
        d_node4 = Node4.deserialize(jss, serial)

        self.assertEqual(node4.a, d_node4.a)
        np.testing.assert_array_equal(node4.b, d_node4.b)
        self.assertEqual(node4.c, d_node4.c)
        self.assertEqual(node4.d, d_node4.d)
        self.assertEqual(node4.e, d_node4.e)
        self.assertEqual(node4.f, d_node4.f)
        self.assertFalse(hasattr(d_node4, 'g'))
        self.assertEqual(node4.h, d_node4.h)
        self.assertEqual(node4.i, d_node4.i)
        self.assertEqual(node4.j.a, d_node4.j.a)
        self.assertEqual(node4.k[0].a, d_node4.k[0].a)
        self.assertIsNone(d_node4.k[1])
        self.assertIsInstance(d_node4.l, Node7)
        self.assertEqual(d_node4.l.b, 3)
        if pd:
            pd.testing.assert_index_equal(node4.m, d_node4.m)
            pd.testing.assert_index_equal(node4.mm, d_node4.mm)
            pd.testing.assert_series_equal(node4.n, d_node4.n)
            pd.testing.assert_frame_equal(node4.o, d_node4.o)
            pd.testing.assert_index_equal(node4.p[0], d_node4.p[0])
            pd.testing.assert_index_equal(node4.p[1], d_node4.p[1])
            pd.testing.assert_series_equal(node4.p[2], d_node4.p[2])
            pd.testing.assert_frame_equal(node4.p[3], d_node4.p[3])
Esempio n. 8
0
    def testAttributeAsDict(self):
        other_data = {}
        if pd:
            df = pd.DataFrame(
                {
                    'a': [1, 2, 3],
                    'b': [to_text('测试'), to_binary('属性'), 'c']
                },
                index=[[0, 0, 1], ['测试', '属性', '测试']])
            other_data['w'] = df.columns
            other_data['ww'] = df.index
            other_data['x'] = df['b']
            other_data['y'] = df
            other_data['z'] = [df.columns, df.index, df['a'], df]
        node4 = Node4(a=to_binary('中文'),
                      b=np.random.randint(4, size=(3, 4)),
                      c=np.datetime64(datetime.datetime.now()),
                      d=np.timedelta64(datetime.timedelta(seconds=1234)),
                      e=np.dtype('int'),
                      f={
                          'a': [True, False, False],
                          'd': [False, None]
                      },
                      h=(1234, to_text('测试'), '属性', None,
                         np.datetime64('1066-10-13'), np.timedelta64(1, 'D'),
                         np.dtype([('x', 'i4'), ('y', 'f4')])),
                      i=(slice(10), slice(0,
                                          2), None, slice(2, 0,
                                                          -1), slice('a', 'b'),
                         slice(datetime.datetime.now(),
                               datetime.datetime.now())),
                      j=Node5(a='aa', b=slice(1, 100, 3)),
                      k=[Node5(a='bb', b=slice(200, -1, -4)), None],
                      l=Node6(b=3, nid=1),
                      m=Node6(b=4, nid=2),
                      n=[Node5(a='cc', b=slice(100, -2, -5)), None],
                      **other_data)

        pbs = ProtobufSerializeProvider()

        serial = node4.serialize(pbs)
        d_node4 = Node4.deserialize(pbs, serial)

        self.assertEqual(node4.a, d_node4.a)
        np.testing.assert_array_equal(node4.b, d_node4.b)
        self.assertEqual(node4.c, d_node4.c)
        self.assertEqual(node4.d, d_node4.d)
        self.assertEqual(node4.e, d_node4.e)
        self.assertEqual(node4.f, d_node4.f)
        self.assertFalse(hasattr(d_node4, 'g'))
        self.assertEqual(node4.h, d_node4.h)
        self.assertEqual(node4.i, d_node4.i)
        self.assertEqual(node4.j.a, d_node4.j.a)
        self.assertEqual(node4.j.b, d_node4.j.b)
        self.assertEqual(node4.k[0].a, d_node4.k[0].a)
        self.assertEqual(node4.k[0].b, d_node4.k[0].b)
        self.assertIsNone(d_node4.k[1])
        self.assertIsInstance(d_node4.l, Node7)
        self.assertEqual(node4.l.b, d_node4.l.b)
        self.assertIsInstance(d_node4.m, Node7)
        self.assertEqual(node4.m.b, d_node4.m.b)
        self.assertIsInstance(d_node4.n[0], Node5)
        self.assertEqual(node4.n[0].a, d_node4.n[0].a)
        self.assertEqual(node4.n[0].b, d_node4.n[0].b)
        self.assertIsNone(d_node4.n[1])
        if pd:
            pd.testing.assert_index_equal(node4.w, d_node4.w)
            pd.testing.assert_index_equal(node4.ww, d_node4.ww)
            pd.testing.assert_series_equal(node4.x, d_node4.x)
            pd.testing.assert_frame_equal(node4.y, d_node4.y)
            pd.testing.assert_index_equal(node4.z[0], d_node4.z[0])
            pd.testing.assert_index_equal(node4.z[1], d_node4.z[1])
            pd.testing.assert_series_equal(node4.z[2], d_node4.z[2])
            pd.testing.assert_frame_equal(node4.z[3], d_node4.z[3])

        with self.assertRaises(TypeError):
            node42 = Node4(j=Node6())
            node42.serialize(pbs)

        with self.assertRaises(TypeError):
            node6 = Node6(nid=0)
            node7 = Node7(nid=1, r=node6)
            node7.serialize(pbs)

        with self.assertRaises(TypeError):
            node6 = Node6(nid=0)
            node7 = Node7(nid=1, rl=[node6])
            node7.serialize(pbs)

        node61 = Node6(nid=0)
        node62 = Node6(nid=0, r=node61)
        serial = node62.serialize(pbs)
        d_node62 = Node6.deserialize(pbs, serial)
        self.assertIsInstance(d_node62.r, Node6)

        node61 = Node6(nid=0)
        node62 = Node6(nid=0, rl=[node61])
        serial = node62.serialize(pbs)
        d_node62 = Node6.deserialize(pbs, serial)
        self.assertIsInstance(d_node62.rl[0], Node6)

        jss = JsonSerializeProvider()

        serial = node4.serialize(jss)
        serial = json.loads(json.dumps(serial), object_hook=OrderedDict)
        d_node4 = Node4.deserialize(jss, serial)

        self.assertEqual(node4.a, d_node4.a)
        np.testing.assert_array_equal(node4.b, d_node4.b)
        self.assertEqual(node4.c, d_node4.c)
        self.assertEqual(node4.d, d_node4.d)
        self.assertEqual(node4.e, d_node4.e)
        self.assertEqual(node4.f, d_node4.f)
        self.assertFalse(hasattr(d_node4, 'g'))
        self.assertEqual(node4.h, d_node4.h)
        self.assertEqual(node4.i, d_node4.i)
        self.assertEqual(node4.j.a, d_node4.j.a)
        self.assertEqual(node4.k[0].a, d_node4.k[0].a)
        self.assertIsNone(d_node4.k[1])
        self.assertIsInstance(d_node4.l, Node7)
        self.assertEqual(node4.l.b, d_node4.l.b)
        self.assertIsInstance(d_node4.m, Node7)
        self.assertEqual(node4.m.b, d_node4.m.b)
        self.assertIsInstance(d_node4.n[0], Node5)
        self.assertEqual(node4.n[0].a, d_node4.n[0].a)
        self.assertEqual(node4.n[0].b, d_node4.n[0].b)
        self.assertIsNone(d_node4.n[1])
        if pd:
            pd.testing.assert_index_equal(node4.w, d_node4.w)
            pd.testing.assert_index_equal(node4.ww, d_node4.ww)
            pd.testing.assert_series_equal(node4.x, d_node4.x)
            pd.testing.assert_frame_equal(node4.y, d_node4.y)
            pd.testing.assert_index_equal(node4.z[0], d_node4.z[0])
            pd.testing.assert_index_equal(node4.z[1], d_node4.z[1])
            pd.testing.assert_series_equal(node4.z[2], d_node4.z[2])
            pd.testing.assert_frame_equal(node4.z[3], d_node4.z[3])

        with self.assertRaises(TypeError):
            node42 = Node4(j=Node6())
            node42.serialize(jss)

        with self.assertRaises(TypeError):
            node6 = Node6()
            node7 = Node7(r=node6)
            node7.serialize(jss)

        with self.assertRaises(TypeError):
            node6 = Node6(nid=0)
            node7 = Node7(nid=1, rl=[node6])
            node7.serialize(jss)

        node61 = Node6()
        node62 = Node6(r=node61)
        serial = node62.serialize(jss)
        d_node62 = Node6.deserialize(jss, serial)
        self.assertIsInstance(d_node62.r, Node6)

        node61 = Node6(nid=0)
        node62 = Node6(nid=0, rl=[node61])
        serial = node62.serialize(jss)
        d_node62 = Node6.deserialize(jss, serial)
        self.assertIsInstance(d_node62.rl[0], Node6)
Esempio n. 9
0
    def testJSONSerialize(self):
        provider = JsonSerializeProvider()

        node2 = Node2(a=[['ss'], ['dd']], data=[3, 7, 212])
        node1 = Node1(
            a='test1',
            b1=2,
            b2=2000,
            b3=5000,
            b4=500000,
            c1=2,
            c2=2000,
            c3=5000,
            c4=500000,
            d1=2.5,
            d2=7.37,
            d3=5.976321,
            cl1=1 + 2j,
            cl2=2.5 + 3.1j,
            e=False,
            f=node2,
            g=Node2(a=[['1', '2'], ['3', '4']]),
            h=[[2, 3], node2, True, {
                1: node2
            },
               np.datetime64('1066-10-13'),
               np.timedelta64(1, 'D'),
               np.complex64(1 + 2j),
               np.complex128(2 + 3j), lambda x: x + 2,
               pytz.timezone('Asia/Shanghai'),
               pd.arrays.IntervalArray([pd.Interval(0, 1),
                                        pd.Interval(1, 5)])],
            i=[Node8(b1=111), Node8(b1=222)],
            j=Node2(a=[['u'], ['v']]),
            k=[Node5(a='uvw'),
               Node8(b1=222, j=Node5(a='xyz')), None],
            l=lambda x: x + 1,
            m=pytz.timezone('Asia/Shanghai'),
            n=pd.arrays.IntervalArray([pd.Interval(0, 1),
                                       pd.Interval(1, 5)]))
        node3 = Node3(value=node1)

        serials = serializes(provider, [node2, node3])
        serials = [
            json.loads(json.dumps(s), object_hook=OrderedDict) for s in serials
        ]
        d_node2, d_node3 = deserializes(provider, [Node2, Node3], serials)

        self.assertIsNot(node2, d_node2)
        self.assertEqual(node2.a, d_node2.a)
        self.assertEqual(node2.data, d_node2.data)

        self.assertIsNot(node3, d_node3)
        self.assertIsInstance(d_node3.value, Node8)
        self.assertIsNot(node3.value, d_node3.value)
        self.assertEqual(node3.value.a, d_node3.value.a)
        self.assertEqual(node3.value.b1, d_node3.value.b1)
        self.assertEqual(node3.value.b2, d_node3.value.b2)
        self.assertEqual(node3.value.b3, d_node3.value.b3)
        self.assertEqual(node3.value.b4, d_node3.value.b4)
        self.assertEqual(node3.value.c1, d_node3.value.c1)
        self.assertEqual(node3.value.c2, d_node3.value.c2)
        self.assertEqual(node3.value.c3, d_node3.value.c3)
        self.assertEqual(node3.value.c4, d_node3.value.c4)
        self.assertAlmostEqual(node3.value.d1, d_node3.value.d1, places=2)
        self.assertAlmostEqual(node3.value.d2, d_node3.value.d2, places=4)
        self.assertAlmostEqual(node3.value.d3, d_node3.value.d3)
        self.assertAlmostEqual(node3.value.cl1, d_node3.value.cl1)
        self.assertAlmostEqual(node3.value.cl2, d_node3.value.cl2)
        self.assertEqual(node3.value.e, d_node3.value.e)
        self.assertIsNot(node3.value.f, d_node3.value.f)
        self.assertEqual(node3.value.f.a, d_node3.value.f.a)
        self.assertIsNot(node3.value.g, d_node3.value.g)
        self.assertEqual(node3.value.g.a, d_node3.value.g.a)
        self.assertEqual(node3.value.h[0], d_node3.value.h[0])
        self.assertNotIsInstance(d_node3.value.h[1], str)
        self.assertIs(d_node3.value.h[1], d_node3.value.f)
        self.assertEqual(node3.value.h[2], True)
        self.assertAlmostEqual(node3.value.h[6], d_node3.value.h[6])
        self.assertAlmostEqual(node3.value.h[7], d_node3.value.h[7])
        self.assertEqual(node3.value.h[8](2), 4)
        self.assertEqual(node3.value.h[9], d_node3.value.h[9])
        np.testing.assert_array_equal(node3.value.h[10], d_node3.value.h[10])
        self.assertEqual([n.b1 for n in node3.value.i],
                         [n.b1 for n in d_node3.value.i])
        self.assertIsInstance(d_node3.value.i[0], Node8)
        self.assertIsInstance(d_node3.value.j, Node2)
        self.assertEqual(node3.value.j.a, d_node3.value.j.a)
        self.assertIsInstance(d_node3.value.k[0], Node5)
        self.assertEqual(node3.value.k[0].a, d_node3.value.k[0].a)
        self.assertIsInstance(d_node3.value.k[1], Node8)
        self.assertEqual(node3.value.k[1].b1, d_node3.value.k[1].b1)
        self.assertIsInstance(d_node3.value.k[1].j, Node5)
        self.assertEqual(node3.value.k[1].j.a, d_node3.value.k[1].j.a)
        self.assertIsNone(node3.value.k[2])
        self.assertEqual(d_node3.value.l(1), 2)
        self.assertEqual(d_node3.value.m, node3.value.m)
        np.testing.assert_array_equal(d_node3.value.n, node3.value.n)

        with self.assertRaises(ValueError):
            serializes(provider, [Node3(value='sth else')])
Esempio n. 10
0
    def testJSONSerialize(self):
        for serial_type in self._get_serial_types():
            provider = JsonSerializeProvider(
                data_serial_type=serial_type, pickle_protocol=TEST_PICKLE_PROTOCOL)

            node2 = Node2(a=[['ss'], ['dd']], data=[3, 7, 212])
            node1 = Node1(a='test1',
                          b1=2, b2=2000, b3=5000, b4=500000,
                          c1=2, c2=2000, c3=5000, c4=500000,
                          d1=2.5, d2=7.37, d3=5.976321,
                          cl1=1+2j, cl2=2.5+3.1j,
                          e=False,
                          f1=Node2Entity(node2),
                          f2=Node2Entity(node2),
                          f3=ClassToPickle(1285),
                          g=Node2(a=[['1', '2'], ['3', '4']]),
                          h=[[2, 3], node2, True, {1: node2}, np.datetime64('1066-10-13'),
                             np.timedelta64(1, 'D'), np.complex64(1+2j), np.complex128(2+3j),
                             lambda x: x + 2, pytz.timezone('Asia/Shanghai'),
                             pd.arrays.IntervalArray([pd.Interval(0, 1), pd.Interval(1, 5)]),
                             nt(1, 2), re.compile(r'.\(\d+\)', flags=re.M)],
                          i=[Node8(b1=111), Node8(b1=222)],
                          j=Node2(a=[['u'], ['v']]),
                          k=[Node5(a='uvw'), Node8(b1=222, j=Node5(a='xyz')), None],
                          l=lambda x: x + 1,
                          m=pytz.timezone('Asia/Shanghai'),
                          n=pd.arrays.IntervalArray([pd.Interval(0, 1), pd.Interval(1, 5)]),
                          o=nt(3, 4),
                          p=re.compile(r'\S\d', flags=re.IGNORECASE))
            node3 = Node3(value=node1)

            serials = serializes(provider, [node2, node3])
            serials = [json.loads(json.dumps(s), object_hook=OrderedDict) for s in serials]

            loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \
                else original_pickle_loads
            with unittest.mock.patch('pickle.loads', new=loads_fun):
                d_node2, d_node3 = deserializes(provider, [Node2, Node3], serials)

            self.assertIsNot(node2, d_node2)
            self.assertEqual(node2.a, d_node2.a)
            self.assertEqual(node2.data, d_node2.data)

            self.assertIsNot(node3, d_node3)
            self.assertIsInstance(d_node3.value, Node8)
            self.assertIsNot(node3.value, d_node3.value)
            self.assertEqual(node3.value.a, d_node3.value.a)
            self.assertEqual(node3.value.b1, d_node3.value.b1)
            self.assertEqual(node3.value.b2, d_node3.value.b2)
            self.assertEqual(node3.value.b3, d_node3.value.b3)
            self.assertEqual(node3.value.b4, d_node3.value.b4)
            self.assertEqual(node3.value.c1, d_node3.value.c1)
            self.assertEqual(node3.value.c2, d_node3.value.c2)
            self.assertEqual(node3.value.c3, d_node3.value.c3)
            self.assertEqual(node3.value.c4, d_node3.value.c4)
            self.assertAlmostEqual(node3.value.d1, d_node3.value.d1, places=2)
            self.assertAlmostEqual(node3.value.d2, d_node3.value.d2, places=4)
            self.assertAlmostEqual(node3.value.d3, d_node3.value.d3)
            self.assertAlmostEqual(node3.value.cl1, d_node3.value.cl1)
            self.assertAlmostEqual(node3.value.cl2, d_node3.value.cl2)
            self.assertEqual(node3.value.e, d_node3.value.e)
            self.assertIsNot(node3.value.f1, d_node3.value.f1)
            self.assertEqual(node3.value.f1.a, d_node3.value.f1.a)
            self.assertIsNot(node3.value.f2, d_node3.value.f2)
            self.assertEqual(node3.value.f2.a, d_node3.value.f2.a)
            self.assertIsNot(node3.value.f3, d_node3.value.f3)
            self.assertEqual(node3.value.f3.a, d_node3.value.f3.a)
            self.assertIsNot(node3.value.g, d_node3.value.g)
            self.assertEqual(node3.value.g.a, d_node3.value.g.a)
            self.assertEqual(node3.value.h[0], d_node3.value.h[0])
            self.assertNotIsInstance(d_node3.value.h[1], str)
            self.assertIs(d_node3.value.h[1], d_node3.value.f1)
            self.assertEqual(node3.value.h[2], True)
            self.assertAlmostEqual(node3.value.h[6], d_node3.value.h[6])
            self.assertAlmostEqual(node3.value.h[7], d_node3.value.h[7])
            self.assertEqual(node3.value.h[8](2), 4)
            self.assertEqual(node3.value.h[9], d_node3.value.h[9])
            np.testing.assert_array_equal(node3.value.h[10], d_node3.value.h[10])
            self.assertEqual(node3.value.h[11], d_node3.value.h[11])
            self.assertEqual(node3.value.h[12].pattern, d_node3.value.h[12].pattern)
            self.assertEqual(node3.value.h[12].flags, d_node3.value.h[12].flags)
            self.assertEqual([n.b1 for n in node3.value.i], [n.b1 for n in d_node3.value.i])
            self.assertIsInstance(d_node3.value.i[0], Node8)
            self.assertIsInstance(d_node3.value.j, Node2)
            self.assertEqual(node3.value.j.a, d_node3.value.j.a)
            self.assertIsInstance(d_node3.value.k[0], Node5)
            self.assertEqual(node3.value.k[0].a, d_node3.value.k[0].a)
            self.assertIsInstance(d_node3.value.k[1], Node8)
            self.assertEqual(node3.value.k[1].b1, d_node3.value.k[1].b1)
            self.assertIsInstance(d_node3.value.k[1].j, Node5)
            self.assertEqual(node3.value.k[1].j.a, d_node3.value.k[1].j.a)
            self.assertIsNone(node3.value.k[2])
            self.assertEqual(d_node3.value.l(1), 2)
            self.assertEqual(d_node3.value.m, node3.value.m)
            np.testing.assert_array_equal(d_node3.value.n, node3.value.n)
            self.assertEqual(d_node3.value.o, node3.value.o)
            self.assertEqual(d_node3.value.p.pattern, node3.value.p.pattern)
            self.assertEqual(d_node3.value.p.flags, node3.value.p.flags)

            with self.assertRaises(ValueError):
                serializes(provider, [Node3(value='sth else')])