python: Make TFramedTransport use a cStringIO for reading
Tested by running a client against a framed-transport server.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@739631 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/py/src/transport/TTransport.py b/lib/py/src/transport/TTransport.py
index db065fb..ddb368f 100644
--- a/lib/py/src/transport/TTransport.py
+++ b/lib/py/src/transport/TTransport.py
@@ -234,7 +234,7 @@
def __init__(self, trans,):
self.__trans = trans
- self.__rbuf = ''
+ self.__rbuf = StringIO()
self.__wbuf = StringIO()
def isOpen(self):
@@ -247,17 +247,17 @@
return self.__trans.close()
def read(self, sz):
- if len(self.__rbuf) == 0:
- self.readFrame()
- give = min(len(self.__rbuf), sz)
- buff = self.__rbuf[0:give]
- self.__rbuf = self.__rbuf[give:]
- return buff
+ ret = self.__rbuf.read(sz)
+ if len(ret) != 0:
+ return ret
+
+ self.readFrame()
+ return self.__rbuf.read(sz)
def readFrame(self):
buff = self.__trans.readAll(4)
sz, = unpack('!i', buff)
- self.__rbuf = self.__trans.readAll(sz)
+ self.__rbuf = StringIO(self.__trans.readAll(sz))
def write(self, buf):
self.__wbuf.write(buf)