Skip to content

Commit 4499a2b

Browse files
authored
fetch-configlet: use logging module instead of print (exercism#2188)
* fetch-configlet: use logging module instead of print * better error logging * use __name__ instead of __file__ for logger name
1 parent c52eba1 commit 4499a2b

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

bin/fetch-configlet

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from datetime import datetime, timezone
33
import io
44
import json
5+
import logging
56
import platform
67
import sys
78
import tarfile
@@ -10,9 +11,13 @@ from urllib.request import urlopen
1011
from urllib.error import HTTPError, URLError
1112

1213

14+
logging.basicConfig(level=logging.INFO)
15+
logger = logging.getLogger(__name__)
16+
1317
BACKOFF_TIME = 5 # in seconds
1418
MAX_RETRIES = 5
1519

20+
1621
def download_and_extract(url):
1722
try:
1823
with urlopen(url) as request:
@@ -22,15 +27,15 @@ def download_and_extract(url):
2227
status = err.code
2328
response = err.reason
2429
except URLError as err:
25-
print(err.reason)
30+
logger.error(err.reason)
2631
time.sleep(BACKOFF_TIME)
2732
return False
2833
if status >= 400:
29-
print(f"Unexpected {status} status from download server.")
34+
logger.error(f"Unexpected {status} status from download server: {response}")
3035
time.sleep(BACKOFF_TIME)
3136
return False
3237

33-
print("extracting...")
38+
logger.info("extracting...")
3439
with tarfile.open(fileobj=io.BytesIO(response), mode="r:*") as file:
3540
file.extractall(path="bin/")
3641
return True
@@ -62,11 +67,11 @@ def fetch_configlet():
6267
headers = err.headers
6368
response = err.reason
6469
except URLError as err:
65-
print(err.reason)
70+
logger.exception(err)
6671
time.sleep(BACKOFF_TIME)
6772
return 1
6873
if status >= 500:
69-
print(f"Sleeping due to {status} response from API.")
74+
logger.info(f"Sleeping due to {status} response from API: {response}")
7075
time.sleep(BACKOFF_TIME)
7176
return 1
7277
if status == 403:
@@ -76,18 +81,19 @@ def fetch_configlet():
7681
delta = wait_until - datetime.now(timezone.utc)
7782
seconds = delta.total_seconds()
7883
wait = seconds + 5 if seconds > BACKOFF_TIME else BACKOFF_TIME
79-
print(f"Rate limited, sleeping {wait} seconds.")
84+
logger.info(f"Rate limited, sleeping {wait} seconds.")
8085
time.sleep(wait)
8186
return 1
8287
if status >= 400:
83-
sys.exit(f"Received unexpected {status} response from API.")
88+
logger.error(f"Received unexpected {status} response from API: {response}")
89+
return 1
8490
data = json.loads(response.decode("utf-8"))
8591
version = data["tag_name"]
8692
machine_info = f"{get_os()}-{get_arch()}"
8793
name = f"configlet-{machine_info}.tgz"
8894
for asset in data["assets"]:
8995
if asset["name"] == name:
90-
print(f"Downloading configlet {version} for {machine_info}")
96+
logger.info(f"Downloading configlet {version} for {machine_info}")
9197
for _ in range(MAX_RETRIES):
9298
if download_and_extract(asset["browser_download_url"]):
9399
return 0

0 commit comments

Comments
 (0)