Skip to content

Commit ae055ce

Browse files
Benjamin Wieganddjc
authored andcommitted
fix changes feed for couchbase sync gateway
1 parent 4971ccc commit ae055ce

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

couchdb/http.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ def close(self):
168168

169169
def iterchunks(self):
170170
assert self.chunked
171+
buffer = b''
171172
while True:
172173
if self.resp.isclosed():
173174
break
@@ -178,8 +179,20 @@ def iterchunks(self):
178179
self._release_conn()
179180
break
180181
chunk = self.resp.fp.read(chunksz)
181-
for ln in chunk.splitlines():
182-
yield ln
182+
183+
for ln in chunk.splitlines(True):
184+
end = (ln == b'\n') and not buffer # end of response
185+
186+
if ln and not end:
187+
if ln.endswith(b'\n'):
188+
# end of a document
189+
yield buffer + ln
190+
buffer = b''
191+
else:
192+
# a break inside a document --> add to buffer and reuse
193+
# later
194+
buffer += ln
195+
183196
self.resp.fp.read(2) #crlf
184197

185198

couchdb/tests/couchhttp.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ def close(self):
6464
def isclosed(self):
6565
return len(self.fp.getvalue()) == self.fp.tell()
6666

67-
data = b'foobarbaz'
67+
data = b'foobarbaz\n'
6868
data = b'\n'.join([hex(len(data))[2:].encode('utf-8'), data])
6969
response = http.ResponseBody(TestHttpResp(util.StringIO(data)),
7070
None, None, None)
71-
self.assertEqual(list(response.iterchunks()), [b'foobarbaz'])
71+
self.assertEqual(list(response.iterchunks()), [b'foobarbaz\n'])
7272
self.assertEqual(list(response.iterchunks()), [])
7373

7474

0 commit comments

Comments
 (0)