class TMemoryOutputBuffer(TMemoryBuffer, object):
    """
    An implementation of TMemoryBuffer using a bounded memory buffer. Writes
    that cause the buffer to exceed its size throw an FMessageSizeException.
    This implementation handles framing data.
    """
    def __init__(self, limit, value=None):
        """
        Create an instance of FBoundedMemoryBuffer where size is the
        maximum writable length of the buffer.

           Args:
               limit: integer size limit of the buffer
               value: optional data value to initialize the buffer with.
        """
        super(TMemoryOutputBuffer, self).__init__(value)
        self._limit = limit

    def write(self, buf):
        """
        Bounded write to buffer
        """
        if len(self) + len(buf) > self._limit > 0:
            self._buffer = TMemoryBuffer()
            raise TTransportException(
                type=TTransportExceptionType.REQUEST_TOO_LARGE,
                message="Buffer size reached {}".format(self._limit))
        self._buffer.write(buf)

    def getvalue(self):
        # TODO make more efficient?
        data = self._buffer.getvalue()
        return struct.pack('!I', len(data)) + data

    def read(self, sz):
        raise Exception("don't call this")

    def __len__(self):
        return len(self.getvalue())
 def testNoInitialValue(self):
     buf = TMemoryBuffer()
     data = buf.read(5)
     buf.write(b"world")
     self.assertEquals(data, b"")
     self.assertEquals(buf.getvalue(), b"world")
 def testReadWrite(self):
     buf = TMemoryBuffer(b"hello")
     data = buf.read(5)
     buf.write(b"world")
     self.assertEquals(data, b"hello")
     self.assertEquals(buf.getvalue(), b"world")
Example #4
0
 def testNoInitialValue(self):
     buf = TMemoryBuffer()
     data = buf.read(5)
     buf.write(b"world")
     self.assertEquals(data, b"")
     self.assertEquals(buf.getvalue(), b"world")
Example #5
0
 def testReadWrite(self):
     buf = TMemoryBuffer(b"hello")
     data = buf.read(5)
     buf.write(b"world")
     self.assertEquals(data, b"hello")
     self.assertEquals(buf.getvalue(), b"world")