From d8fdd97a28ef38605c6fa7d6c5870fcd749c4358 Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Thu, 18 Jan 2024 10:34:02 +0000 Subject: [PATCH] Add error handling to version check --- framework/python/src/api/api.py | 50 ++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/framework/python/src/api/api.py b/framework/python/src/api/api.py index dc57607a5..ebd022acf 100644 --- a/framework/python/src/api/api.py +++ b/framework/python/src/api/api.py @@ -247,32 +247,38 @@ async def get_version(self, response: Response): json_response["installed_version"] = "v" + current_version # Check latest version number from GitHub API - version_check = requests.get(LATEST_RELEASE_CHECK, timeout=5) + try: + version_check = requests.get(LATEST_RELEASE_CHECK, timeout=5) + + # Check OK response was received + if version_check.status_code != 200: + response.status_code = 500 + LOGGER.error(version_check.content) + return self._generate_msg(False, "Failed to fetch latest version") + + # Extract version number from response, removing the leading 'v' + latest_version_no = version_check.json()["name"].strip("v") + LOGGER.debug(f"Latest version available is {latest_version_no}") + + # Craft JSON response + json_response["latest_version"] = "v" + latest_version_no + json_response["latest_version_url"] = version_check.json()["html_url"] + + # String comparison between current and latest version + if latest_version_no > current_version: + json_response["update_available"] = True + LOGGER.debug("An update is available") + else: + json_response["update_available"] = False + LOGGER.debug("The latest version is installed") - # Check OK response was received - if version_check.status_code != 200: + return json_response + except Exception as e: response.status_code = 500 - LOGGER.error(version_check.content) + LOGGER.error("Failed to fetch latest version") + LOGGER.debug(e) return self._generate_msg(False, "Failed to fetch latest version") - # Extract version number from response, removing the leading 'v' - latest_version_no = version_check.json()["name"].strip("v") - LOGGER.debug(f"Latest version available is {latest_version_no}") - - # Craft JSON response - json_response["latest_version"] = "v" + latest_version_no - json_response["latest_version_url"] = version_check.json()["html_url"] - - # String comparison between current and latest version - if latest_version_no > current_version: - json_response["update_available"] = True - LOGGER.debug("An update is available") - else: - json_response["update_available"] = False - LOGGER.debug("The latest version is installed") - - return json_response - async def get_reports(self, request: Request): LOGGER.debug("Received reports list request") # Resolve the server IP from the request so we