From 6acc269d1883c822595ab5f346c6e4c1e1b2724c Mon Sep 17 00:00:00 2001 From: David Reiss Date: Fri, 26 Feb 2010 00:56:02 +0000 Subject: [PATCH] THRIFT-695. python: [de]serialize convenience functions git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@916508 13f79535-47bb-0310-9956-ffa450edef68 --- lib/py/src/TSerialization.py | 15 +++++++++++++++ test/py/SerializationTest.py | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 lib/py/src/TSerialization.py diff --git a/lib/py/src/TSerialization.py b/lib/py/src/TSerialization.py new file mode 100644 index 00000000..8ec703db --- /dev/null +++ b/lib/py/src/TSerialization.py @@ -0,0 +1,15 @@ +from protocol import TBinaryProtocol +from transport import TTransport + +def serialize(thrift_object, protocol_factory = TBinaryProtocol.TBinaryProtocolFactory()): + transport = TTransport.TMemoryBuffer() + protocol = protocol_factory.getProtocol(transport) + thrift_object.write(protocol) + return transport.getvalue() + +def deserialize(base, buf, protocol_factory = TBinaryProtocol.TBinaryProtocolFactory()): + transport = TTransport.TMemoryBuffer(buf) + protocol = protocol_factory.getProtocol(transport) + base.read(protocol) + return base + diff --git a/test/py/SerializationTest.py b/test/py/SerializationTest.py index 52bedd5e..e37098ba 100755 --- a/test/py/SerializationTest.py +++ b/test/py/SerializationTest.py @@ -27,6 +27,7 @@ from ThriftTest.ttypes import * from thrift.transport import TTransport from thrift.transport import TSocket from thrift.protocol import TBinaryProtocol +from thrift.TSerialization import serialize, deserialize import unittest import time @@ -118,6 +119,23 @@ class AcceleratedFramedTest(unittest.TestCase): self.assertEqual(prot.readString(), bigstring) self.assertEqual(prot.readI16(), 24) +class SerializersTest(unittest.TestCase): + + def testSerializeThenDeserialize(self): + obj = Xtruct2(i32_thing=1, + struct_thing=Xtruct(string_thing="foo")) + + s1 = serialize(obj) + for i in range(10): + self.assertEquals(s1, serialize(obj)) + objcopy = Xtruct2() + deserialize(objcopy, serialize(obj)) + self.assertEquals(obj, objcopy) + + obj = Xtruct(string_thing="bar") + objcopy = Xtruct() + deserialize(objcopy, serialize(obj)) + self.assertEquals(obj, objcopy) def suite(): @@ -127,6 +145,7 @@ def suite(): suite.addTest(loader.loadTestsFromTestCase(NormalBinaryTest)) suite.addTest(loader.loadTestsFromTestCase(AcceleratedBinaryTest)) suite.addTest(loader.loadTestsFromTestCase(AcceleratedFramedTest)) + suite.addTest(loader.loadTestsFromTestCase(SerializersTest)) return suite if __name__ == "__main__": -- 2.17.1