ci: retry if rate limited in roulette (#19523)

[skip ci]
This commit is contained in:
Ankush Menat 2023-01-09 13:11:22 +05:30 committed by GitHub
parent ac5b86cab1
commit 92a705f8fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,8 +4,10 @@ import re
import shlex
import subprocess
import sys
import time
import urllib.request
from functools import lru_cache
from urllib.error import HTTPError
@lru_cache(maxsize=None)
@ -15,11 +17,25 @@ def fetch_pr_data(pr_number, repo, endpoint=""):
if endpoint:
api_url += f"/{endpoint}"
req = urllib.request.Request(api_url)
res = urllib.request.urlopen(req)
res = req(api_url)
return json.loads(res.read().decode("utf8"))
def req(url):
"Simple resilient request call to handle rate limits."
retries = 0
while True:
try:
req = urllib.request.Request(url)
return urllib.request.urlopen(req)
except HTTPError as exc:
if exc.code == 403 and retries < 5:
retries += 1
time.sleep(retries)
continue
raise
def get_files_list(pr_number, repo="frappe/frappe"):
return [change["filename"] for change in fetch_pr_data(pr_number, repo, "files")]