From 9d66ac4a6a8cb6e65ba21549c50a71bc66881ae4 Mon Sep 17 00:00:00 2001 From: Sander Steffann Date: Fri, 24 Jan 2020 18:06:10 +0100 Subject: [PATCH] Refactor the code to be more readable --- netbox/utilities/context_processors.py | 10 +++--- netbox/utilities/versions.py | 48 +++++++++++++++----------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/netbox/utilities/context_processors.py b/netbox/utilities/context_processors.py index b12a127fa..5dadf55da 100644 --- a/netbox/utilities/context_processors.py +++ b/netbox/utilities/context_processors.py @@ -1,7 +1,7 @@ from django.conf import settings as django_settings from packaging import version -from utilities.versions import get_latest_version +from utilities.versions import get_latest_release def settings(request): @@ -17,14 +17,14 @@ def latest_version(request): """ Get the latest version from the GitHub repository """ - github_latest_version, github_url = get_latest_version() + latest_release, github_url = get_latest_release() latest_version_str = None latest_version_url = None - if isinstance(github_latest_version, version.Version): + if isinstance(latest_release, version.Version): current_version = version.parse(django_settings.VERSION) - if github_latest_version > current_version: - latest_version_str = str(github_latest_version) + if latest_release > current_version: + latest_version_str = str(latest_release) latest_version_url = github_url return { diff --git a/netbox/utilities/versions.py b/netbox/utilities/versions.py index 40d5d90af..72341c8f7 100644 --- a/netbox/utilities/versions.py +++ b/netbox/utilities/versions.py @@ -3,25 +3,33 @@ from cacheops import cached from django.conf import settings from packaging import version -if settings.GITHUB_VERSION_TIMEOUT and settings.GITHUB_REPOSITORY: - @cached(timeout=settings.GITHUB_VERSION_TIMEOUT) - def get_latest_version(): - url = 'https://api.github.com/repos/{}/releases'.format(settings.GITHUB_REPOSITORY) - headers = { - 'Accept': 'application/vnd.github.v3+json', - } - try: - response = requests.get(url, headers=headers) - versions = [(version.parse(release['tag_name']), release.get('html_url')) - for release in response.json() - if 'tag_name' in release] - if versions: - return max(versions) - except Exception: - pass - return 'unknown', None +@cached(timeout=settings.GITHUB_VERSION_TIMEOUT if settings.GITHUB_VERSION_TIMEOUT > 0 else 1) +def get_releases(pre_releases=False): + url = 'https://api.github.com/repos/{}/releases'.format(settings.GITHUB_REPOSITORY) + headers = { + 'Accept': 'application/vnd.github.v3+json', + } + try: + response = requests.get(url, headers=headers) + releases = [(version.parse(release['tag_name']), release.get('html_url')) + for release in response.json() + if 'tag_name' in release] + except Exception: + releases = [] -else: - def get_latest_version(): - return None + if not pre_releases: + releases = [(release, url) + for release, url in releases + if not release.is_devrelease and not release.is_prerelease] + + return releases + + +def get_latest_release(pre_releases=False): + if settings.GITHUB_VERSION_TIMEOUT > 0 and settings.GITHUB_REPOSITORY: + releases = get_releases(pre_releases) + if releases: + return max(releases) + + return 'unknown', None