Python3.5 thrift cybin.ProtocolError: no protocol version header
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/hskj/anaconda3/lib/python3.5/site-packages/happybase/connection.py", line 242, in tables names = self.client.getTableNames() File "/hskj/anaconda3/lib/python3.5/site-packages/thriftpy/thrift.py", line 198, in _req return self._recv(_api) File "/hskj/anaconda3/lib/python3.5/site-packages/thriftpy/thrift.py", line 210, in _recv fname, mtype, rseqid = self._iprot.read_message_begin() File "thriftpy/protocol/cybin/cybin.pyx", line 439, in cybin.TCyBinaryProtocol.read_message_begin (thriftpy/protocol/cybin/cybin.c:6470) cybin.ProtocolError: No protocol version header The problem is with the use of "read / write" flags. There is a non-standard implementation of the βcybinβ standard Thrift binary protocol, the error is in this specific block of code :
def read_message_begin(self): cdef int32_t size, version, seqid cdef TType ttype size = read_i32(self.trans) if size < 0: version = size & VERSION_MASK if version != VERSION_1: raise ProtocolError('invalid version %d' % version) name = c_read_val(self.trans, T_STRING) ttype = <TType>(size & TYPE_MASK) else: if self.strict_read: raise ProtocolError('No protocol version header') // <<<<<< name = c_read_string(self.trans, size) ttype = <TType>(read_i08(self.trans)) seqid = read_i32(self.trans) return name, ttype, seqid Without trying, I would suggest that setting the "strict read" flag to false (instead of true) when creating an instance of the CyBin protocol should do the trick.