THRIFT-3596 Better conformance to PEP8
This closes #832
diff --git a/lib/py/src/protocol/TProtocol.py b/lib/py/src/protocol/TProtocol.py
index d9aa2e8..ed6938b 100644
--- a/lib/py/src/protocol/TProtocol.py
+++ b/lib/py/src/protocol/TProtocol.py
@@ -28,373 +28,373 @@
class TProtocolException(TException):
- """Custom Protocol Exception class"""
+ """Custom Protocol Exception class"""
- UNKNOWN = 0
- INVALID_DATA = 1
- NEGATIVE_SIZE = 2
- SIZE_LIMIT = 3
- BAD_VERSION = 4
- NOT_IMPLEMENTED = 5
- DEPTH_LIMIT = 6
+ UNKNOWN = 0
+ INVALID_DATA = 1
+ NEGATIVE_SIZE = 2
+ SIZE_LIMIT = 3
+ BAD_VERSION = 4
+ NOT_IMPLEMENTED = 5
+ DEPTH_LIMIT = 6
- def __init__(self, type=UNKNOWN, message=None):
- TException.__init__(self, message)
- self.type = type
+ def __init__(self, type=UNKNOWN, message=None):
+ TException.__init__(self, message)
+ self.type = type
class TProtocolBase(object):
- """Base class for Thrift protocol driver."""
+ """Base class for Thrift protocol driver."""
- def __init__(self, trans):
- self.trans = trans
+ def __init__(self, trans):
+ self.trans = trans
- @staticmethod
- def _check_length(limit, length):
- if length < 0:
- raise TTransportException(TTransportException.NEGATIVE_SIZE,
- 'Negative length: %d' % length)
- if limit is not None and length > limit:
- raise TTransportException(TTransportException.SIZE_LIMIT,
- 'Length exceeded max allowed: %d' % limit)
+ @staticmethod
+ def _check_length(limit, length):
+ if length < 0:
+ raise TTransportException(TTransportException.NEGATIVE_SIZE,
+ 'Negative length: %d' % length)
+ if limit is not None and length > limit:
+ raise TTransportException(TTransportException.SIZE_LIMIT,
+ 'Length exceeded max allowed: %d' % limit)
- def writeMessageBegin(self, name, ttype, seqid):
- pass
+ def writeMessageBegin(self, name, ttype, seqid):
+ pass
- def writeMessageEnd(self):
- pass
+ def writeMessageEnd(self):
+ pass
- def writeStructBegin(self, name):
- pass
+ def writeStructBegin(self, name):
+ pass
- def writeStructEnd(self):
- pass
+ def writeStructEnd(self):
+ pass
- def writeFieldBegin(self, name, ttype, fid):
- pass
+ def writeFieldBegin(self, name, ttype, fid):
+ pass
- def writeFieldEnd(self):
- pass
+ def writeFieldEnd(self):
+ pass
- def writeFieldStop(self):
- pass
+ def writeFieldStop(self):
+ pass
- def writeMapBegin(self, ktype, vtype, size):
- pass
+ def writeMapBegin(self, ktype, vtype, size):
+ pass
- def writeMapEnd(self):
- pass
+ def writeMapEnd(self):
+ pass
- def writeListBegin(self, etype, size):
- pass
+ def writeListBegin(self, etype, size):
+ pass
- def writeListEnd(self):
- pass
+ def writeListEnd(self):
+ pass
- def writeSetBegin(self, etype, size):
- pass
+ def writeSetBegin(self, etype, size):
+ pass
- def writeSetEnd(self):
- pass
+ def writeSetEnd(self):
+ pass
- def writeBool(self, bool_val):
- pass
+ def writeBool(self, bool_val):
+ pass
- def writeByte(self, byte):
- pass
+ def writeByte(self, byte):
+ pass
- def writeI16(self, i16):
- pass
+ def writeI16(self, i16):
+ pass
- def writeI32(self, i32):
- pass
+ def writeI32(self, i32):
+ pass
- def writeI64(self, i64):
- pass
+ def writeI64(self, i64):
+ pass
- def writeDouble(self, dub):
- pass
+ def writeDouble(self, dub):
+ pass
- def writeString(self, str_val):
- self.writeBinary(str_to_binary(str_val))
+ def writeString(self, str_val):
+ self.writeBinary(str_to_binary(str_val))
- def writeBinary(self, str_val):
- pass
+ def writeBinary(self, str_val):
+ pass
- def writeUtf8(self, str_val):
- self.writeString(str_val.encode('utf8'))
+ def writeUtf8(self, str_val):
+ self.writeString(str_val.encode('utf8'))
- def readMessageBegin(self):
- pass
+ def readMessageBegin(self):
+ pass
- def readMessageEnd(self):
- pass
+ def readMessageEnd(self):
+ pass
- def readStructBegin(self):
- pass
+ def readStructBegin(self):
+ pass
- def readStructEnd(self):
- pass
+ def readStructEnd(self):
+ pass
- def readFieldBegin(self):
- pass
+ def readFieldBegin(self):
+ pass
- def readFieldEnd(self):
- pass
+ def readFieldEnd(self):
+ pass
- def readMapBegin(self):
- pass
+ def readMapBegin(self):
+ pass
- def readMapEnd(self):
- pass
+ def readMapEnd(self):
+ pass
- def readListBegin(self):
- pass
+ def readListBegin(self):
+ pass
- def readListEnd(self):
- pass
+ def readListEnd(self):
+ pass
- def readSetBegin(self):
- pass
+ def readSetBegin(self):
+ pass
- def readSetEnd(self):
- pass
+ def readSetEnd(self):
+ pass
- def readBool(self):
- pass
+ def readBool(self):
+ pass
- def readByte(self):
- pass
+ def readByte(self):
+ pass
- def readI16(self):
- pass
+ def readI16(self):
+ pass
- def readI32(self):
- pass
+ def readI32(self):
+ pass
- def readI64(self):
- pass
+ def readI64(self):
+ pass
- def readDouble(self):
- pass
+ def readDouble(self):
+ pass
- def readString(self):
- return binary_to_str(self.readBinary())
+ def readString(self):
+ return binary_to_str(self.readBinary())
- def readBinary(self):
- pass
+ def readBinary(self):
+ pass
- def readUtf8(self):
- return self.readString().decode('utf8')
+ def readUtf8(self):
+ return self.readString().decode('utf8')
- def skip(self, ttype):
- if ttype == TType.STOP:
- return
- elif ttype == TType.BOOL:
- self.readBool()
- elif ttype == TType.BYTE:
- self.readByte()
- elif ttype == TType.I16:
- self.readI16()
- elif ttype == TType.I32:
- self.readI32()
- elif ttype == TType.I64:
- self.readI64()
- elif ttype == TType.DOUBLE:
- self.readDouble()
- elif ttype == TType.STRING:
- self.readString()
- elif ttype == TType.STRUCT:
- name = self.readStructBegin()
- while True:
- (name, ttype, id) = self.readFieldBegin()
+ def skip(self, ttype):
if ttype == TType.STOP:
- break
- self.skip(ttype)
- self.readFieldEnd()
- self.readStructEnd()
- elif ttype == TType.MAP:
- (ktype, vtype, size) = self.readMapBegin()
- for i in range(size):
- self.skip(ktype)
- self.skip(vtype)
- self.readMapEnd()
- elif ttype == TType.SET:
- (etype, size) = self.readSetBegin()
- for i in range(size):
- self.skip(etype)
- self.readSetEnd()
- elif ttype == TType.LIST:
- (etype, size) = self.readListBegin()
- for i in range(size):
- self.skip(etype)
- self.readListEnd()
+ return
+ elif ttype == TType.BOOL:
+ self.readBool()
+ elif ttype == TType.BYTE:
+ self.readByte()
+ elif ttype == TType.I16:
+ self.readI16()
+ elif ttype == TType.I32:
+ self.readI32()
+ elif ttype == TType.I64:
+ self.readI64()
+ elif ttype == TType.DOUBLE:
+ self.readDouble()
+ elif ttype == TType.STRING:
+ self.readString()
+ elif ttype == TType.STRUCT:
+ name = self.readStructBegin()
+ while True:
+ (name, ttype, id) = self.readFieldBegin()
+ if ttype == TType.STOP:
+ break
+ self.skip(ttype)
+ self.readFieldEnd()
+ self.readStructEnd()
+ elif ttype == TType.MAP:
+ (ktype, vtype, size) = self.readMapBegin()
+ for i in range(size):
+ self.skip(ktype)
+ self.skip(vtype)
+ self.readMapEnd()
+ elif ttype == TType.SET:
+ (etype, size) = self.readSetBegin()
+ for i in range(size):
+ self.skip(etype)
+ self.readSetEnd()
+ elif ttype == TType.LIST:
+ (etype, size) = self.readListBegin()
+ for i in range(size):
+ self.skip(etype)
+ self.readListEnd()
- # tuple of: ( 'reader method' name, is_container bool, 'writer_method' name )
- _TTYPE_HANDLERS = (
- (None, None, False), # 0 TType.STOP
- (None, None, False), # 1 TType.VOID # TODO: handle void?
- ('readBool', 'writeBool', False), # 2 TType.BOOL
- ('readByte', 'writeByte', False), # 3 TType.BYTE and I08
- ('readDouble', 'writeDouble', False), # 4 TType.DOUBLE
- (None, None, False), # 5 undefined
- ('readI16', 'writeI16', False), # 6 TType.I16
- (None, None, False), # 7 undefined
- ('readI32', 'writeI32', False), # 8 TType.I32
- (None, None, False), # 9 undefined
- ('readI64', 'writeI64', False), # 10 TType.I64
- ('readString', 'writeString', False), # 11 TType.STRING and UTF7
- ('readContainerStruct', 'writeContainerStruct', True), # 12 *.STRUCT
- ('readContainerMap', 'writeContainerMap', True), # 13 TType.MAP
- ('readContainerSet', 'writeContainerSet', True), # 14 TType.SET
- ('readContainerList', 'writeContainerList', True), # 15 TType.LIST
- (None, None, False), # 16 TType.UTF8 # TODO: handle utf8 types?
- (None, None, False) # 17 TType.UTF16 # TODO: handle utf16 types?
- )
+ # tuple of: ( 'reader method' name, is_container bool, 'writer_method' name )
+ _TTYPE_HANDLERS = (
+ (None, None, False), # 0 TType.STOP
+ (None, None, False), # 1 TType.VOID # TODO: handle void?
+ ('readBool', 'writeBool', False), # 2 TType.BOOL
+ ('readByte', 'writeByte', False), # 3 TType.BYTE and I08
+ ('readDouble', 'writeDouble', False), # 4 TType.DOUBLE
+ (None, None, False), # 5 undefined
+ ('readI16', 'writeI16', False), # 6 TType.I16
+ (None, None, False), # 7 undefined
+ ('readI32', 'writeI32', False), # 8 TType.I32
+ (None, None, False), # 9 undefined
+ ('readI64', 'writeI64', False), # 10 TType.I64
+ ('readString', 'writeString', False), # 11 TType.STRING and UTF7
+ ('readContainerStruct', 'writeContainerStruct', True), # 12 *.STRUCT
+ ('readContainerMap', 'writeContainerMap', True), # 13 TType.MAP
+ ('readContainerSet', 'writeContainerSet', True), # 14 TType.SET
+ ('readContainerList', 'writeContainerList', True), # 15 TType.LIST
+ (None, None, False), # 16 TType.UTF8 # TODO: handle utf8 types?
+ (None, None, False) # 17 TType.UTF16 # TODO: handle utf16 types?
+ )
- def _ttype_handlers(self, ttype, spec):
- if spec == 'BINARY':
- if ttype != TType.STRING:
- raise TProtocolException(type=TProtocolException.INVALID_DATA,
- message='Invalid binary field type %d' % ttype)
- return ('readBinary', 'writeBinary', False)
- if sys.version_info[0] == 2 and spec == 'UTF8':
- if ttype != TType.STRING:
- raise TProtocolException(type=TProtocolException.INVALID_DATA,
- message='Invalid string field type %d' % ttype)
- return ('readUtf8', 'writeUtf8', False)
- return self._TTYPE_HANDLERS[ttype] if ttype < len(self._TTYPE_HANDLERS) else (None, None, False)
+ def _ttype_handlers(self, ttype, spec):
+ if spec == 'BINARY':
+ if ttype != TType.STRING:
+ raise TProtocolException(type=TProtocolException.INVALID_DATA,
+ message='Invalid binary field type %d' % ttype)
+ return ('readBinary', 'writeBinary', False)
+ if sys.version_info[0] == 2 and spec == 'UTF8':
+ if ttype != TType.STRING:
+ raise TProtocolException(type=TProtocolException.INVALID_DATA,
+ message='Invalid string field type %d' % ttype)
+ return ('readUtf8', 'writeUtf8', False)
+ return self._TTYPE_HANDLERS[ttype] if ttype < len(self._TTYPE_HANDLERS) else (None, None, False)
- def _read_by_ttype(self, ttype, spec, espec):
- reader_name, _, is_container = self._ttype_handlers(ttype, spec)
- if reader_name is None:
- raise TProtocolException(type=TProtocolException.INVALID_DATA,
- message='Invalid type %d' % (ttype))
- reader_func = getattr(self, reader_name)
- read = (lambda: reader_func(espec)) if is_container else reader_func
- while True:
- yield read()
+ def _read_by_ttype(self, ttype, spec, espec):
+ reader_name, _, is_container = self._ttype_handlers(ttype, spec)
+ if reader_name is None:
+ raise TProtocolException(type=TProtocolException.INVALID_DATA,
+ message='Invalid type %d' % (ttype))
+ reader_func = getattr(self, reader_name)
+ read = (lambda: reader_func(espec)) if is_container else reader_func
+ while True:
+ yield read()
- def readFieldByTType(self, ttype, spec):
- return self._read_by_ttype(ttype, spec, spec).next()
+ def readFieldByTType(self, ttype, spec):
+ return self._read_by_ttype(ttype, spec, spec).next()
- def readContainerList(self, spec):
- ttype, tspec, is_immutable = spec
- (list_type, list_len) = self.readListBegin()
- # TODO: compare types we just decoded with thrift_spec
- elems = islice(self._read_by_ttype(ttype, spec, tspec), list_len)
- results = (tuple if is_immutable else list)(elems)
- self.readListEnd()
- return results
+ def readContainerList(self, spec):
+ ttype, tspec, is_immutable = spec
+ (list_type, list_len) = self.readListBegin()
+ # TODO: compare types we just decoded with thrift_spec
+ elems = islice(self._read_by_ttype(ttype, spec, tspec), list_len)
+ results = (tuple if is_immutable else list)(elems)
+ self.readListEnd()
+ return results
- def readContainerSet(self, spec):
- ttype, tspec, is_immutable = spec
- (set_type, set_len) = self.readSetBegin()
- # TODO: compare types we just decoded with thrift_spec
- elems = islice(self._read_by_ttype(ttype, spec, tspec), set_len)
- results = (frozenset if is_immutable else set)(elems)
- self.readSetEnd()
- return results
+ def readContainerSet(self, spec):
+ ttype, tspec, is_immutable = spec
+ (set_type, set_len) = self.readSetBegin()
+ # TODO: compare types we just decoded with thrift_spec
+ elems = islice(self._read_by_ttype(ttype, spec, tspec), set_len)
+ results = (frozenset if is_immutable else set)(elems)
+ self.readSetEnd()
+ return results
- def readContainerStruct(self, spec):
- (obj_class, obj_spec) = spec
- obj = obj_class()
- obj.read(self)
- return obj
+ def readContainerStruct(self, spec):
+ (obj_class, obj_spec) = spec
+ obj = obj_class()
+ obj.read(self)
+ return obj
- def readContainerMap(self, spec):
- ktype, kspec, vtype, vspec, is_immutable = spec
- (map_ktype, map_vtype, map_len) = self.readMapBegin()
- # TODO: compare types we just decoded with thrift_spec and
- # abort/skip if types disagree
- keys = self._read_by_ttype(ktype, spec, kspec)
- vals = self._read_by_ttype(vtype, spec, vspec)
- keyvals = islice(zip(keys, vals), map_len)
- results = (TFrozenDict if is_immutable else dict)(keyvals)
- self.readMapEnd()
- return results
+ def readContainerMap(self, spec):
+ ktype, kspec, vtype, vspec, is_immutable = spec
+ (map_ktype, map_vtype, map_len) = self.readMapBegin()
+ # TODO: compare types we just decoded with thrift_spec and
+ # abort/skip if types disagree
+ keys = self._read_by_ttype(ktype, spec, kspec)
+ vals = self._read_by_ttype(vtype, spec, vspec)
+ keyvals = islice(zip(keys, vals), map_len)
+ results = (TFrozenDict if is_immutable else dict)(keyvals)
+ self.readMapEnd()
+ return results
- def readStruct(self, obj, thrift_spec, is_immutable=False):
- if is_immutable:
- fields = {}
- self.readStructBegin()
- while True:
- (fname, ftype, fid) = self.readFieldBegin()
- if ftype == TType.STOP:
- break
- try:
- field = thrift_spec[fid]
- except IndexError:
- self.skip(ftype)
- else:
- if field is not None and ftype == field[1]:
- fname = field[2]
- fspec = field[3]
- val = self.readFieldByTType(ftype, fspec)
- if is_immutable:
- fields[fname] = val
- else:
- setattr(obj, fname, val)
- else:
- self.skip(ftype)
- self.readFieldEnd()
- self.readStructEnd()
- if is_immutable:
- return obj(**fields)
+ def readStruct(self, obj, thrift_spec, is_immutable=False):
+ if is_immutable:
+ fields = {}
+ self.readStructBegin()
+ while True:
+ (fname, ftype, fid) = self.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ try:
+ field = thrift_spec[fid]
+ except IndexError:
+ self.skip(ftype)
+ else:
+ if field is not None and ftype == field[1]:
+ fname = field[2]
+ fspec = field[3]
+ val = self.readFieldByTType(ftype, fspec)
+ if is_immutable:
+ fields[fname] = val
+ else:
+ setattr(obj, fname, val)
+ else:
+ self.skip(ftype)
+ self.readFieldEnd()
+ self.readStructEnd()
+ if is_immutable:
+ return obj(**fields)
- def writeContainerStruct(self, val, spec):
- val.write(self)
+ def writeContainerStruct(self, val, spec):
+ val.write(self)
- def writeContainerList(self, val, spec):
- ttype, tspec, _ = spec
- self.writeListBegin(ttype, len(val))
- for _ in self._write_by_ttype(ttype, val, spec, tspec):
- pass
- self.writeListEnd()
+ def writeContainerList(self, val, spec):
+ ttype, tspec, _ = spec
+ self.writeListBegin(ttype, len(val))
+ for _ in self._write_by_ttype(ttype, val, spec, tspec):
+ pass
+ self.writeListEnd()
- def writeContainerSet(self, val, spec):
- ttype, tspec, _ = spec
- self.writeSetBegin(ttype, len(val))
- for _ in self._write_by_ttype(ttype, val, spec, tspec):
- pass
- self.writeSetEnd()
+ def writeContainerSet(self, val, spec):
+ ttype, tspec, _ = spec
+ self.writeSetBegin(ttype, len(val))
+ for _ in self._write_by_ttype(ttype, val, spec, tspec):
+ pass
+ self.writeSetEnd()
- def writeContainerMap(self, val, spec):
- ktype, kspec, vtype, vspec, _ = spec
- self.writeMapBegin(ktype, vtype, len(val))
- for _ in zip(self._write_by_ttype(ktype, six.iterkeys(val), spec, kspec),
- self._write_by_ttype(vtype, six.itervalues(val), spec, vspec)):
- pass
- self.writeMapEnd()
+ def writeContainerMap(self, val, spec):
+ ktype, kspec, vtype, vspec, _ = spec
+ self.writeMapBegin(ktype, vtype, len(val))
+ for _ in zip(self._write_by_ttype(ktype, six.iterkeys(val), spec, kspec),
+ self._write_by_ttype(vtype, six.itervalues(val), spec, vspec)):
+ pass
+ self.writeMapEnd()
- def writeStruct(self, obj, thrift_spec):
- self.writeStructBegin(obj.__class__.__name__)
- for field in thrift_spec:
- if field is None:
- continue
- fname = field[2]
- val = getattr(obj, fname)
- if val is None:
- # skip writing out unset fields
- continue
- fid = field[0]
- ftype = field[1]
- fspec = field[3]
- self.writeFieldBegin(fname, ftype, fid)
- self.writeFieldByTType(ftype, val, fspec)
- self.writeFieldEnd()
- self.writeFieldStop()
- self.writeStructEnd()
+ def writeStruct(self, obj, thrift_spec):
+ self.writeStructBegin(obj.__class__.__name__)
+ for field in thrift_spec:
+ if field is None:
+ continue
+ fname = field[2]
+ val = getattr(obj, fname)
+ if val is None:
+ # skip writing out unset fields
+ continue
+ fid = field[0]
+ ftype = field[1]
+ fspec = field[3]
+ self.writeFieldBegin(fname, ftype, fid)
+ self.writeFieldByTType(ftype, val, fspec)
+ self.writeFieldEnd()
+ self.writeFieldStop()
+ self.writeStructEnd()
- def _write_by_ttype(self, ttype, vals, spec, espec):
- _, writer_name, is_container = self._ttype_handlers(ttype, spec)
- writer_func = getattr(self, writer_name)
- write = (lambda v: writer_func(v, espec)) if is_container else writer_func
- for v in vals:
- yield write(v)
+ def _write_by_ttype(self, ttype, vals, spec, espec):
+ _, writer_name, is_container = self._ttype_handlers(ttype, spec)
+ writer_func = getattr(self, writer_name)
+ write = (lambda v: writer_func(v, espec)) if is_container else writer_func
+ for v in vals:
+ yield write(v)
- def writeFieldByTType(self, ttype, val, spec):
- self._write_by_ttype(ttype, [val], spec, spec).next()
+ def writeFieldByTType(self, ttype, val, spec):
+ self._write_by_ttype(ttype, [val], spec, spec).next()
def checkIntegerLimits(i, bits):
@@ -408,10 +408,10 @@
raise TProtocolException(TProtocolException.INVALID_DATA,
"i32 requires -2147483648 <= number <= 2147483647")
elif bits == 64 and (i < -9223372036854775808 or i > 9223372036854775807):
- raise TProtocolException(TProtocolException.INVALID_DATA,
- "i64 requires -9223372036854775808 <= number <= 9223372036854775807")
+ raise TProtocolException(TProtocolException.INVALID_DATA,
+ "i64 requires -9223372036854775808 <= number <= 9223372036854775807")
class TProtocolFactory(object):
- def getProtocol(self, trans):
- pass
+ def getProtocol(self, trans):
+ pass