Skip to content

Commit 99b2dfb

Browse files
committed
Add support for retrying when GitHub rate limit the import
1 parent 9b38096 commit 99b2dfb

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed

scripts/import_backends.py

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import TYPE_CHECKING, Dict, List, Sequence, cast
77

88
import github
9+
import retrying
910
from termcolor import cprint
1011
from ticket_type import Ticket
1112

@@ -224,12 +225,41 @@ def submit(self, ticket: Ticket) -> int:
224225
# larger gap for better reliability.
225226
time.sleep(5)
226227

227-
issue = self.repo.create_issue(
228-
ticket.summary,
229-
self.description_text(ticket),
230-
milestone=self.get_or_create_milestone(ticket.milestone),
231-
labels=self.labels(ticket),
228+
# We also want to wait and retry when GitHub then additionally rate
229+
# limit us anyway...
230+
231+
def retry_on_exception(exception: Exception) -> bool:
232+
return isinstance(exception, github.GithubException)
233+
234+
@retrying.retry(
235+
retry_on_exception=retry_on_exception,
236+
wait_fixed=20_000,
232237
)
238+
def create_issue() -> github.Issue.Issue:
239+
RATE_LIMIT_MESSAGE = "exceeded a secondary rate limit and have been temporarily blocked" # noqa:E501
240+
241+
try:
242+
return self.repo.create_issue(
243+
ticket.summary,
244+
self.description_text(ticket),
245+
milestone=self.get_or_create_milestone(ticket.milestone),
246+
labels=self.labels(ticket),
247+
)
248+
except github.GithubException as e:
249+
message = e.data.get('message')
250+
if (
251+
isinstance(message, str)
252+
and RATE_LIMIT_MESSAGE in message
253+
):
254+
print("... GitHub Rate Limited ...")
255+
raise github.RateLimitExceededException(
256+
status=e.status,
257+
data=e.data,
258+
headers=e.headers,
259+
) from e
260+
raise
261+
262+
issue = create_issue()
233263

234264
ticket_number: int = issue.number
235265
self._known_titles[ticket_number] = ticket.summary

scripts/requirements-dev.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,15 @@ requests==2.25.1
8787
# via
8888
# -r ./scripts/requirements.txt
8989
# pygithub
90+
retrying==1.3.3
91+
# via -r ./scripts/requirements.txt
9092
six==1.16.0
9193
# via
9294
# -r ./scripts/requirements.txt
9395
# flake8-debugger
9496
# flake8-tuple
9597
# pynacl
98+
# retrying
9699
termcolor==1.1.0
97100
# via -r ./scripts/requirements.txt
98101
testfixtures==6.17.1

scripts/requirements.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
PyGithub
22
PyYAML
3+
retrying
34
termcolor

scripts/requirements.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@ pyyaml==5.4.1
2626
# via -r ./scripts/requirements.in
2727
requests==2.25.1
2828
# via pygithub
29+
retrying==1.3.3
30+
# via -r ./scripts/requirements.in
2931
six==1.16.0
30-
# via pynacl
32+
# via
33+
# pynacl
34+
# retrying
3135
termcolor==1.1.0
3236
# via -r ./scripts/requirements.in
3337
urllib3==1.26.5

0 commit comments

Comments
 (0)