From ca08e2bb87e2e669cabb9ff782a59297626aaf35 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Tue, 18 Feb 2025 15:11:19 -0500 Subject: [PATCH] feat: handle rate limit 403 --- git_aggregator/repo.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/git_aggregator/repo.py b/git_aggregator/repo.py index 0656b89..a40fe1a 100644 --- a/git_aggregator/repo.py +++ b/git_aggregator/repo.py @@ -6,6 +6,7 @@ import os import re import subprocess +import time import requests @@ -391,6 +392,14 @@ def collect_prs_info(self): pr_info['path'] = '{owner}/{repo}/pulls/{pr}'.format(**pr_info) pr_info['shortcut'] = '{owner}/{repo}#{pr}'.format(**pr_info) r = self._github_api_get('/repos/{path}'.format(**pr_info)) + if r.status_code == 403 and 'X-RateLimit-Reset' in r.headers: + reset_time = int(r.headers['X-RateLimit-Reset']) + wait_time = max(0, reset_time - int(time.time())) + logger.warning( + 'Rate limit exceeded. Waiting for %s seconds.', wait_time + ) + time.sleep(wait_time) + r = self._github_api_get('/repos/{path}'.format(**pr_info)) if r.status_code != 200: logger.warning( 'Could not get status of {path}. '