def test_extensions(self): m = MessageOfTypes() primitives = { extDouble: 123.4, extString: "string", NestedExtension.extInt: 4 } for key, value in primitives.items(): m.Extensions[key] = value m.Extensions[NestedExtension.extNested].req = "nested" # Confirm compatibility with JSON serialization res = json.loads(json.dumps(to_dict(m))) assert '___X' in res exts = res['___X'] assert set(exts.keys()) == set( [str(f.number) for f, _ in m.ListFields() if f.is_extension]) for key, value in primitives.items(): assert exts[str(key.number)] == value assert exts[str(NestedExtension.extNested.number)]['req'] == 'nested' deser = to_protobuf(MessageOfTypes, res) assert deser for key, value in primitives.items(): assert deser.Extensions[key] == m.Extensions[key] assert deser.Extensions[NestedExtension.extNested].req == m.Extensions[ NestedExtension.extNested].req
def test_full_extensions(self): m = MessageOfTypes() primitives = { extDouble: 123.4, extString: "string", NestedExtension.extInt: 4 } for key, value in primitives.items(): m.Extensions[key] = value m.Extensions[NestedExtension.extNested].req = "nested" # Confirm compatibility with JSON serialization res = json.loads( json.dumps(protobuf_to_dict(m, extensions=FULL_EXTENSIONS))) expected = { u'tests.extDouble': 123.4, u'tests.NestedExtension.extInt': 4, u'tests.NestedExtension.extNested': { u'req': u'nested' }, u'tests.extString': u'string' } self.assertEqual(expected, res) self.assertEqual( set(res.keys()), set([ str(f.full_name) for f, _ in m.ListFields() if f.is_extension ])) for key, value in primitives.items(): assert res[key.full_name] == value assert res[str(NestedExtension.extNested.full_name)]['req'] == 'nested' deser = dict_to_protobuf(MessageOfTypes, res) assert deser for key, value in primitives.items(): assert deser.Extensions[key] == m.Extensions[key] assert deser.Extensions[NestedExtension.extNested].req == m.Extensions[ NestedExtension.extNested].req