Skip to content

Commit

Permalink
Handle transient ConnectionRefusedError from repology
Browse files Browse the repository at this point in the history
Also: use a timeout on urlopen(), so we don't pause indefinitely if the
far end drops the connection.

Also: reuse the last successfully fetched data if fetching fails.
  • Loading branch information
jon-turney committed Nov 7, 2024
1 parent 56594c6 commit 7f371b8
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions calm/repology.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,17 @@ def repology_fetch_versions():
url = url + last_pn + '/'
url += '?inrepo=cygwin'

request = urllib.request.Request(url)
request = urllib.request.Request(url, timeout=600)
request.add_header('User-Agent', 'CygwinUpstreamVersionFetch/1.0 +http://cygwin.com/')

try:
r = urllib.request.urlopen(request)
except urllib.error.URLError as e:
logging.error("consulting repology for upstream versions failed: %s" % (e.reason))
return {}
except ConnectionResetError as e:
logging.error("consulting repology for upstream versions failed: %s" % (e))
return {}

j = json.loads(r.read().decode('utf-8'))

Expand Down Expand Up @@ -153,11 +156,11 @@ def annotate_packages(args, packages):
logging.info("not consulting %s due to ratelimit" % (REPOLOGY_API_URL))
else:
logging.info("consulting %s" % (REPOLOGY_API_URL))
last_data = repology_fetch_versions()

uv = last_data
uv = repology_fetch_versions()
if uv:
last_data = uv

for pn in uv:
for pn in last_data:
spn = pn + '-src'
for arch in packages:
if spn in packages[arch]:
Expand Down

0 comments on commit 7f371b8

Please sign in to comment.