Skip to content

Commit 3fc9957

Browse files
authored
Merge pull request josegonzalez#149 from eht16/simple_api_request_throttling
Add basic API request throttling
2 parents fb7cc5e + 78098aa commit 3fc9957

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

github_backup/github_backup.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,16 @@ def parse_args():
331331
action='store_true',
332332
dest='include_assets',
333333
help='include assets alongside release information; only applies if including releases')
334+
parser.add_argument('--throttle-limit',
335+
dest='throttle_limit',
336+
type=int,
337+
default=0,
338+
help='start throttling of GitHub API requests after this amount of API requests remain')
339+
parser.add_argument('--throttle-pause',
340+
dest='throttle_pause',
341+
type=float,
342+
default=30.0,
343+
help='wait this amount of seconds when API request throttling is active (default: 30.0, requires --throttle-limit to be set)')
334344
return parser.parse_args()
335345

336346

@@ -439,6 +449,14 @@ def retrieve_data_gen(args, template, query_args=None, single_request=False):
439449
r, errors = _get_response(request, auth, template)
440450

441451
status_code = int(r.getcode())
452+
# be gentle with API request limit and throttle requests if remaining requests getting low
453+
limit_remaining = int(r.headers.get('x-ratelimit-remaining', 0))
454+
if limit_remaining <= args.throttle_limit:
455+
log_info(
456+
'API request limit hit: {} requests left, pausing further requests for {}s'.format(
457+
limit_remaining,
458+
args.throttle_pause))
459+
time.sleep(args.throttle_pause)
442460

443461
retries = 0
444462
while retries < 3 and status_code == 502:

0 commit comments

Comments
 (0)