Skip to content

Commit 9aaf781

Browse files
authored
Merge pull request #33 from tannewt/fix_5.3.1
Fix 5.3.1 by providing find and json in one big chunk
2 parents 2a2c20e + 93030cd commit 9aaf781

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

adafruit_requests.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,31 @@ def _recv_into(self, buf, size=0):
121121
return read_size
122122
return self.socket.recv_into(buf, size)
123123

124+
@staticmethod
125+
def _find(buf, needle, start, end):
126+
if hasattr(buf, "find"):
127+
return buf.find(needle, start, end)
128+
result = -1
129+
i = start
130+
while i < end:
131+
j = 0
132+
while j < len(needle) and i + j < end and buf[i + j] == needle[j]:
133+
j += 1
134+
if j == len(needle):
135+
result = i
136+
break
137+
i += 1
138+
139+
return result
140+
124141
def _readto(self, first, second=b""):
125142
buf = self._receive_buffer
126143
end = self._received_length
127144
while True:
128-
firsti = buf.find(first, 0, end)
145+
firsti = self._find(buf, first, 0, end)
129146
secondi = -1
130147
if second:
131-
secondi = buf.find(second, 0, end)
148+
secondi = self._find(buf, second, 0, end)
132149

133150
i = -1
134151
needle_len = 0
@@ -318,7 +335,12 @@ def json(self):
318335
if not self._raw:
319336
self._raw = _RawResponse(self)
320337

321-
obj = json.load(self._raw)
338+
try:
339+
obj = json.load(self._raw)
340+
except OSError:
341+
# <5.3.1 doesn't piecemeal load json from any object with readinto so load the whole
342+
# string.
343+
obj = json.loads(self._raw.read())
322344
if not self._cached:
323345
self._cached = obj
324346
self.close()

0 commit comments

Comments
 (0)