Refactor the code to be more readable

This commit is contained in:
Sander Steffann 2020-01-24 18:06:10 +01:00
parent 405d93c6f2
commit 9d66ac4a6a
2 changed files with 33 additions and 25 deletions

View File

@ -1,7 +1,7 @@
from django.conf import settings as django_settings from django.conf import settings as django_settings
from packaging import version from packaging import version
from utilities.versions import get_latest_version from utilities.versions import get_latest_release
def settings(request): def settings(request):
@ -17,14 +17,14 @@ def latest_version(request):
""" """
Get the latest version from the GitHub repository 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_str = None
latest_version_url = 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) current_version = version.parse(django_settings.VERSION)
if github_latest_version > current_version: if latest_release > current_version:
latest_version_str = str(github_latest_version) latest_version_str = str(latest_release)
latest_version_url = github_url latest_version_url = github_url
return { return {

View File

@ -3,25 +3,33 @@ from cacheops import cached
from django.conf import settings from django.conf import settings
from packaging import version 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: if not pre_releases:
def get_latest_version(): releases = [(release, url)
return None 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