feedleware/feedleware/util.py

34 lines
868 B
Python

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