File: __init__.py

package info (click to toggle)
python-thriftpy 0.3.9%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 560 kB
  • sloc: python: 3,287; ansic: 30; makefile: 7
file content (90 lines) | stat: -rw-r--r-- 2,764 bytes parent folder | download | duplicates (2)
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"
]