From 083db6955e03e516b00f78b866c53fcfe937367e Mon Sep 17 00:00:00 2001 From: Alexander Cecile <35971201+AlexanderCecile@users.noreply.github.com> Date: Tue, 25 Aug 2020 18:28:21 -0400 Subject: [PATCH] Implement error handling and improve documentation in get_file_by_url --- updateHostsFile.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/updateHostsFile.py b/updateHostsFile.py index cee883237..2a4bce297 100644 --- a/updateHostsFile.py +++ b/updateHostsFile.py @@ -1474,19 +1474,37 @@ def get_file_by_url(url, params=None, **kwargs): Parameters ---------- - url - params - kwargs + url : str or bytes + URL for the new Request object. + params : + Dictionary, list of tuples or bytes to send in the query string for the Request. + kwargs : + Optional arguments that request takes. Returns ------- - content: str + url_data : str or None + The data retrieved at that URL from the file. Returns None if the + attempted retrieval is unsuccessful. """ - req = requests.get(url=url, params=params, **kwargs) + try: + req = requests.get(url=url, params=params, **kwargs) + except requests.exceptions.RequestException: + print("Error retrieving data from {}".format(url)) + return None + req.encoding = req.apparent_encoding - res_text = "\n".join([domain_to_idna(line) for line in req.text.split("\n")]) - return res_text + + try: + res_text = req.text + except UnicodeDecodeError: + print("Decoding error when retrieving data from {}".format(url)) + return None + + res = "\n".join([domain_to_idna(line) for line in res_text.split("\n")]) + + return res def write_data(f, data):