Skip to content

Commit 3193d12

Browse files
committed
Avoid to crash in case of HTTP 502 error
Survive also on socket.error connections like on HTTPError or URLError. This should solve issue josegonzalez#110.
1 parent da4b29a commit 3193d12

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

bin/github-backup

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env python
22

33
from __future__ import print_function
4+
import socket
45

56
import argparse
67
import base64
@@ -404,6 +405,16 @@ def retrieve_data(args, template, query_args=None, single_request=False):
404405

405406
status_code = int(r.getcode())
406407

408+
retries = 0
409+
while retries < 3 and status_code == 502:
410+
print('API request returned HTTP 502: Bad Gateway. Retrying in 5 seconds')
411+
retries += 1
412+
time.sleep(5)
413+
request = _construct_request(per_page, page, query_args, template, auth) # noqa
414+
r, errors = _get_response(request, auth, template)
415+
416+
status_code = int(r.getcode())
417+
407418
if status_code != 200:
408419
template = 'API request returned HTTP {0}: {1}'
409420
errors.append(template.format(status_code, r.reason))
@@ -450,6 +461,11 @@ def _get_response(request, auth, template):
450461
should_continue = _request_url_error(template, retry_timeout)
451462
if not should_continue:
452463
raise
464+
except socket.error as e:
465+
log_warning(e.strerror)
466+
should_continue = _request_url_error(template, retry_timeout)
467+
if not should_continue:
468+
raise
453469

454470
if should_continue:
455471
continue

0 commit comments

Comments
 (0)