|
@@ -1,35 +1,24 @@
|
|
|
-import requests
|
|
|
|
|
-from cacheops import cached
|
|
|
|
|
-from django.conf import settings
|
|
|
|
|
-from packaging import version
|
|
|
|
|
-
|
|
|
|
|
|
|
+import logging
|
|
|
|
|
|
|
|
-@cached(timeout=settings.UPDATE_CACHE_TIMEOUT, extra=settings.UPDATE_REPO_URL)
|
|
|
|
|
-def get_releases(pre_releases=False):
|
|
|
|
|
- url = '{}/releases'.format(settings.UPDATE_REPO_URL)
|
|
|
|
|
- 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 = []
|
|
|
|
|
|
|
+from cacheops import CacheMiss, cache
|
|
|
|
|
+from django.conf import settings
|
|
|
|
|
|
|
|
- if not pre_releases:
|
|
|
|
|
- releases = [(release, url)
|
|
|
|
|
- for release, url in releases
|
|
|
|
|
- if not release.is_devrelease and not release.is_prerelease]
|
|
|
|
|
|
|
+from utilities.background_tasks import get_releases
|
|
|
|
|
|
|
|
- return releases
|
|
|
|
|
|
|
+# Get an instance of a logger
|
|
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_latest_release(pre_releases=False):
|
|
def get_latest_release(pre_releases=False):
|
|
|
if settings.UPDATE_REPO_URL:
|
|
if settings.UPDATE_REPO_URL:
|
|
|
- releases = get_releases(pre_releases)
|
|
|
|
|
- if releases:
|
|
|
|
|
- return max(releases)
|
|
|
|
|
|
|
+ try:
|
|
|
|
|
+ releases = cache.get('netbox_releases')
|
|
|
|
|
+ if releases:
|
|
|
|
|
+ return max(releases)
|
|
|
|
|
+ except CacheMiss:
|
|
|
|
|
+ logger.debug("Starting background task to get releases")
|
|
|
|
|
+
|
|
|
|
|
+ # Get the releases in the background worker, it will fill the cache
|
|
|
|
|
+ get_releases.delay(pre_releases=pre_releases)
|
|
|
|
|
|
|
|
return 'unknown', None
|
|
return 'unknown', None
|