Skip to content

Commit c302bd2

Browse files
author
Pierre Turin
committed
Fix problem of appended requests bodies for POST and PUT
1 parent 21e1b48 commit c302bd2

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

couchdb/http.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,12 @@ def _release_conn(self):
160160

161161
def close(self):
162162
while not self.resp.isclosed():
163-
self.resp.read(CHUNK_SIZE)
163+
chunk = self.resp.read(CHUNK_SIZE)
164+
#alexandre-couchdb-python-app-engine changes
165+
# on App Engine self.resp.isclosed() is always False and leads to an infinite loop
166+
if len(chunk) == 0:
167+
self.resp.close()
168+
###################################
164169
if self.conn:
165170
self._release_conn()
166171

@@ -271,6 +276,17 @@ def request(self, method, url, body=None, headers=None, credentials=None,
271276
headers['Authorization'] = authorization
272277

273278
path_query = util.urlunsplit(('', '') + util.urlsplit(url)[2:4] + ('',))
279+
280+
#alexandre-couchdb-python-app-engine change
281+
#Use the same connection object with multiple POST requests on app engine
282+
#concatenates successive requests bodies
283+
# e.g
284+
# Req1: body1
285+
# Req2: body1 body2
286+
# Req3: body1 body2 body3
287+
# ...
288+
if method == "POST" or method == "PUT":
289+
self.connection_pool.remove(url)
274290
conn = self.connection_pool.get(url)
275291

276292
def _try_request_with_retries(retries):
@@ -493,6 +509,14 @@ def release(self, url, conn):
493509
finally:
494510
self.lock.release()
495511

512+
#alexandre-couchdb-python-app-engine Change
513+
def remove(self, url):
514+
scheme, host = util.urlsplit(url, 'http', False)[:2]
515+
connList = self.conns[(scheme,host)]
516+
for conn in connList:
517+
conn.close() #No Op on Google App Engine
518+
self.conns.pop((scheme,host),0)
519+
496520
def __del__(self):
497521
for key, conns in list(self.conns.items()):
498522
for conn in conns:

0 commit comments

Comments
 (0)