1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from thriftpy._compat import CYTHON
from ..thrift import TType, TException
def readall(read_fn, sz):
buff = b''
have = 0
while have < sz:
chunk = read_fn(sz - have)
have += len(chunk)
buff += chunk
if len(chunk) == 0:
raise TTransportException(TTransportException.END_OF_FILE,
"End of file reading from transport")
return buff
class TTransportBase(object):
"""Base class for Thrift transport layer."""
def _read(self, sz):
raise NotImplementedError
def read(self, sz):
return readall(self._read, sz)
class TTransportException(TException):
"""Custom Transport Exception class"""
thrift_spec = {
1: (TType.STRING, 'message'),
2: (TType.I32, 'type'),
}
UNKNOWN = 0
NOT_OPEN = 1
ALREADY_OPEN = 2
TIMED_OUT = 3
END_OF_FILE = 4
def __init__(self, type=UNKNOWN, message=None):
super(TTransportException, self).__init__()
self.type = type
self.message = message
# Avoid recursive import
from .socket import TSocket, TServerSocket # noqa
from .sslsocket import TSSLSocket, TSSLServerSocket # noqa
from ._ssl import create_thriftpy_context # noqa
from .buffered import TBufferedTransport, TBufferedTransportFactory # noqa
from .framed import TFramedTransport, TFramedTransportFactory # noqa
from .memory import TMemoryBuffer # noqa
if CYTHON:
from .buffered import TCyBufferedTransport, TCyBufferedTransportFactory
from .framed import TCyFramedTransport, TCyFramedTransportFactory
from .memory import TCyMemoryBuffer
# enable cython binary by default for CPython.
TMemoryBuffer = TCyMemoryBuffer # noqa
TBufferedTransport = TCyBufferedTransport # noqa
TBufferedTransportFactory = TCyBufferedTransportFactory # noqa
TFramedTransport = TCyFramedTransport # noqa
TFramedTransportFactory = TCyFramedTransportFactory # noqa
else:
# disable cython binary protocol for PYPY since it's slower.
TCyMemoryBuffer = TMemoryBuffer
TCyBufferedTransport = TBufferedTransport
TCyBufferedTransportFactory = TBufferedTransportFactory
TCyFramedTransport = TFramedTransport
TCyFramedTransportFactory = TFramedTransportFactory
__all__ = [
"TSocket", "TServerSocket",
"TSSLSocket", "TSSLServerSocket", "create_thriftpy_context",
"TTransportBase", "TTransportException",
"TMemoryBuffer", "TFramedTransport", "TFramedTransportFactory",
"TBufferedTransport", "TBufferedTransportFactory", "TCyMemoryBuffer",
"TCyBufferedTransport", "TCyBufferedTransportFactory",
"TCyFramedTransport", "TCyFramedTransportFactory"
]
|