1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00
Files
netbox-community-netbox/netbox/utilities/background_tasks.py

43 lines
1.3 KiB
Python
Raw Normal View History

2020-02-27 19:36:02 +01:00
import logging
import requests
from django.conf import settings
from django.core.cache import cache
2020-02-27 19:36:02 +01:00
from django_rq import job
from packaging import version
# Get an instance of a logger
2020-03-13 11:55:06 -04:00
logger = logging.getLogger('netbox.releases')
2020-02-27 19:36:02 +01:00
@job('check_releases')
2020-02-27 19:36:02 +01:00
def get_releases(pre_releases=False):
url = settings.RELEASE_CHECK_URL
2020-02-27 19:36:02 +01:00
headers = {
'Accept': 'application/vnd.github.v3+json',
}
2020-03-17 12:14:17 -04:00
releases = []
2020-02-27 19:36:02 +01:00
2020-02-27 21:54:43 +01:00
try:
logger.info(f"Fetching new releases from {url}")
response = requests.get(url, headers=headers, proxies=settings.HTTP_PROXIES)
2020-02-27 21:54:43 +01:00
response.raise_for_status()
2020-03-13 11:55:06 -04:00
total_releases = len(response.json())
2020-02-27 21:54:43 +01:00
2020-02-27 19:36:02 +01:00
for release in response.json():
if 'tag_name' not in release:
continue
2020-02-27 21:54:43 +01:00
if not pre_releases and (release.get('devrelease') or release.get('prerelease')):
2020-02-27 19:36:02 +01:00
continue
releases.append((version.parse(release['tag_name']), release.get('html_url')))
logger.debug(f"Found {total_releases} releases; {len(releases)} usable")
2020-03-13 11:55:06 -04:00
except requests.exceptions.RequestException as exc:
logger.exception(f"Error while fetching latest release from {url}: {exc}")
2020-02-27 19:36:02 +01:00
return []
# Cache the most recent release
cache.set('latest_release', max(releases), settings.RELEASE_CHECK_TIMEOUT)
2020-03-13 11:55:06 -04:00
2020-02-27 19:36:02 +01:00
return releases