Skip to content

Commit ddb070e

Browse files
committed
Further robustness improvements
1 parent 785baa8 commit ddb070e

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

devstats/query.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,17 @@ def send_query(query, query_type, headers, cursor=None):
8787
# Build request payload
8888
payload = {"query": "".join(query.split("\n"))}
8989

90-
retries = 10
90+
max_retries = 10
91+
retries = max_retries
9192
while retries > 0:
9293
try:
9394
response = requests.post(endpoint, json=payload, headers=headers)
9495
except (
9596
requests.exceptions.ChunkedEncodingError,
9697
requests.exceptions.ConnectionError,
9798
) as e:
98-
print(f"`requests` error: {e}; retrying.")
99+
print(f"`requests` error: {e}; retrying after 1 minute.")
100+
time.sleep(1 * 60)
99101
retries -= 1
100102
else:
101103
data = json.loads(response.content)
@@ -105,7 +107,11 @@ def send_query(query, query_type, headers, cursor=None):
105107
retries -= 1
106108
else:
107109
# Success
108-
retries = 0
110+
retries = -1
111+
112+
if retries == 0:
113+
msg = f"Could not fetch data after {max_retries} attempts. Aborting."
114+
raise SystemExit(msg)
109115

110116
rate_limit = {
111117
h: response.headers[h]
@@ -133,8 +139,9 @@ def get_all_responses(query, query_type, headers):
133139
rdata = send_query(query, query_type, headers, cursor=last_cursor)
134140
try:
135141
pdata, last_cursor, total_count = parse_single_query(rdata, query_type)
136-
except KeyError:
137-
print("Malformed response; repeating request")
142+
except (KeyError, ValueError):
143+
print("Malformed response; repeating request after 1 minute")
144+
time.sleep(1 * 60)
138145
continue
139146
data.extend(pdata)
140147
ratelimit_remaining = int(rdata["x-ratelimit-remaining"])
@@ -159,7 +166,7 @@ def parse_single_query(data, query_type):
159166
total_count = data["data"]["repository"][query_type]["totalCount"]
160167
data = data["data"]["repository"][query_type]["edges"]
161168
last_cursor = data[-1]["cursor"]
162-
except KeyError as e:
169+
except (KeyError, ValueError) as e:
163170
print(f"Error parsing response: {data}")
164171
raise e
165172
return data, last_cursor, total_count

0 commit comments

Comments
 (0)