Skip to content

Commit 841cd45

Browse files
committed
Extract the retry logic so it's not repeated multiple times.
1 parent 7b6a5ae commit 841cd45

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

couchdb/http.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,10 @@ def request(self, method, url, body=None, headers=None, credentials=None,
167167
conn.connect()
168168

169169
def _try_request(retries=1):
170+
def _retry():
171+
conn.close()
172+
conn.connect()
173+
return _try_request(retries - 1)
170174
try:
171175
conn.putrequest(method, path_query, skip_accept_encoding=True)
172176
for header in headers:
@@ -189,21 +193,15 @@ def _try_request(retries=1):
189193
# line saying, "Presumably, the server closed the connection
190194
# before sending a valid response."
191195
if retries > 0 and e.line == '':
192-
conn.close()
193-
conn.connect()
194-
return _try_request(retries - 1)
196+
return _retry()
195197
else:
196198
raise
197199
except socket.error, e:
198200
ecode = e.args[0]
199201
if retries > 0 and ecode == 54: # reset by peer
200-
conn.close()
201-
conn.connect()
202-
return _try_request(retries - 1)
202+
return _retry()
203203
elif retries > 0 and ecode == 32: # broken pipe
204-
conn.close()
205-
conn.connect()
206-
return _try_request(retries - 1)
204+
return _retry()
207205
else:
208206
raise
209207

0 commit comments

Comments
 (0)