THRIFT-695. python: [de]serialize convenience functions
authorDavid Reiss <dreiss@apache.org>
Fri, 26 Feb 2010 00:56:02 +0000 (00:56 +0000)
committerDavid Reiss <dreiss@apache.org>
Fri, 26 Feb 2010 00:56:02 +0000 (00:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@916508 13f79535-47bb-0310-9956-ffa450edef68

lib/py/src/TSerialization.py [new file with mode: 0644]
test/py/SerializationTest.py

diff --git a/lib/py/src/TSerialization.py b/lib/py/src/TSerialization.py
new file mode 100644 (file)
index 0000000..8ec703d
--- /dev/null
@@ -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
+
index 52bedd5..e37098b 100755 (executable)
@@ -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__":