Просмотр исходного кода

Refactor the code to be more readable

Sander Steffann 6 лет назад
Родитель
Сommit
9d66ac4a6a
2 измененных файлов с 33 добавлено и 25 удалено
  1. 5 5
      netbox/utilities/context_processors.py
  2. 28 20
      netbox/utilities/versions.py

+ 5 - 5
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 {

+ 28 - 20
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