from datetime import datetime import http import urllib import urllib.request HTTPRequest = urllib.request.Request HTTPResponse = http.client.HTTPResponse HTTPException = http.client.HTTPException def parse_iso(iso: str) -> datetime: return datetime.fromisoformat(iso.replace("Z", "+00:00")) def send_with_retry(request: HTTPRequest, retries: int) -> HTTPResponse: """ Send an HTTP request and retry in case of failure. :param request: request to try sending :param retries: number of retries :returns: response sent by the server :throws HTTPException: if the number of retries is exceeded """ last_err = HTTPException() while retries: try: return urllib.request.urlopen(request, timeout=3) except HTTPException as err: retries -= 1 last_err = err raise last_err