Skip to content

Commit 9fb6d3f

Browse files
authored
Added check for ratelimit headers for GitHub Enterprise compatib… (#985)
Added check for ratelimit headers for GitHub Enterprise compatibility
2 parents 9302684 + 0e5af81 commit 9fb6d3f

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

binderhub/repoproviders.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,7 @@ def github_api_request(self, api_url, etag=None):
593593
elif (
594594
e.code == 403
595595
and e.response
596+
and 'x-ratelimit-remaining' in e.response.headers
596597
and e.response.headers.get('x-ratelimit-remaining') == '0'
597598
):
598599
rate_limit = e.response.headers['x-ratelimit-limit']
@@ -617,28 +618,30 @@ def github_api_request(self, api_url, etag=None):
617618
else:
618619
raise
619620

620-
# record and log github rate limit
621-
remaining = int(resp.headers['x-ratelimit-remaining'])
622-
rate_limit = int(resp.headers['x-ratelimit-limit'])
623-
reset_timestamp = int(resp.headers['x-ratelimit-reset'])
624-
625-
# record with prometheus
626-
GITHUB_RATE_LIMIT.set(remaining)
627-
628-
# log at different levels, depending on remaining fraction
629-
fraction = remaining / rate_limit
630-
if fraction < 0.2:
631-
log = self.log.warning
632-
elif fraction < 0.5:
633-
log = self.log.info
634-
else:
635-
log = self.log.debug
636-
637-
# str(timedelta) looks like '00:32'
638-
delta = timedelta(seconds=int(reset_timestamp - time.time()))
639-
log("GitHub rate limit remaining {remaining}/{limit}. Reset in {delta}.".format(
640-
remaining=remaining, limit=rate_limit, delta=delta,
641-
))
621+
if 'x-ratelimit-remaining' in resp.headers:
622+
# record and log github rate limit
623+
remaining = int(resp.headers['x-ratelimit-remaining'])
624+
rate_limit = int(resp.headers['x-ratelimit-limit'])
625+
reset_timestamp = int(resp.headers['x-ratelimit-reset'])
626+
627+
# record with prometheus
628+
GITHUB_RATE_LIMIT.set(remaining)
629+
630+
# log at different levels, depending on remaining fraction
631+
fraction = remaining / rate_limit
632+
if fraction < 0.2:
633+
log = self.log.warning
634+
elif fraction < 0.5:
635+
log = self.log.info
636+
else:
637+
log = self.log.debug
638+
639+
# str(timedelta) looks like '00:32'
640+
delta = timedelta(seconds=int(reset_timestamp - time.time()))
641+
log("GitHub rate limit remaining {remaining}/{limit}. Reset in {delta}.".format(
642+
remaining=remaining, limit=rate_limit, delta=delta,
643+
))
644+
642645
return resp
643646

644647
@gen.coroutine

0 commit comments

Comments
 (0)