Skip to content

Commit 8b218a9

Browse files
authored
Merge pull request #485 from basho/fixes/lrb/py273-recv
Add fix for old Python versions
2 parents 3c95a98 + 40a3a1c commit 8b218a9

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Repository Cloning
2121
Install
2222
=======
2323

24-
The recommended versions of Python for use with this client are Python `2.7.x`, `3.3.x`, `3.4.x` and `3.5.x`. The latest version from each series should be preferred.
24+
The recommended versions of Python for use with this client are Python `2.7.8` (or greater, `2.7.11` as of `2016-06-21`), `3.3.x`, `3.4.x` and `3.5.x`. The latest version from each series should be preferred. Older versions of the Python `2.7.X` and `3.X` series should be used with caution as they are not covered by integration tests.
2525

2626
Riak TS (Timeseries)
2727
===================

riak/transports/tcp/connection.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919

2020

2121
class TcpConnection(object):
22+
def __init__(self):
23+
self.bytes_required = False
24+
2225
"""
2326
Connection-related methods for TcpTransport.
2427
"""
@@ -163,15 +166,32 @@ def _recv_msg(self):
163166
# https://github.com/basho/riak-python-client/issues/425
164167
raise BadResource(e)
165168
mv = memoryview(msgbuf)
166-
msg_code, = struct.unpack("B", mv[0:1])
169+
mcb = mv[0:1]
170+
if self.bytes_required:
171+
mcb = mcb.tobytes()
172+
try:
173+
msg_code, = struct.unpack("B", mcb)
174+
except struct.error:
175+
# NB: Python 2.7.3 requires this
176+
# http://bugs.python.org/issue10212
177+
msg_code, = struct.unpack("B", mv[0:1].tobytes())
178+
self.bytes_required = True
167179
data = mv[1:].tobytes()
168180
return (msg_code, data)
169181

170182
def _recv_pkt(self):
171183
# TODO FUTURE re-use buffer
172184
msglen_buf = self._recv(4)
173185
# NB: msg length is an unsigned int
174-
msglen, = struct.unpack('!I', msglen_buf)
186+
if self.bytes_required:
187+
msglen_buf = bytes(msglen_buf)
188+
try:
189+
msglen, = struct.unpack('!I', msglen_buf)
190+
except struct.error:
191+
# NB: Python 2.7.3 requires this
192+
# http://bugs.python.org/issue10212
193+
msglen, = struct.unpack('!I', bytes(msglen_buf))
194+
self.bytes_required = True
175195
return self._recv(msglen)
176196

177197
def _recv(self, msglen):

0 commit comments

Comments
 (0)