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

52 lines
1.4 KiB
Python
Raw Normal View History

2020-02-27 19:36:02 +01:00
import logging
import requests
2020-02-27 21:54:43 +01:00
from cacheops.simple import cache, CacheMiss
2020-02-27 19:36:02 +01:00
from django.conf import settings
from django_rq import job
from packaging import version
# Get an instance of a logger
logger = logging.getLogger(__name__)
@job
def get_releases(pre_releases=False):
url = '{}/releases'.format(settings.UPDATE_REPO_URL)
headers = {
'Accept': 'application/vnd.github.v3+json',
}
2020-02-27 21:54:43 +01:00
# Check whether this URL has failed and shouldn't be retried yet
try:
failed_url = cache.get('netbox_releases_no_retry')
if url == failed_url:
return []
except CacheMiss:
pass
2020-02-27 19:36:02 +01:00
releases = []
# noinspection PyBroadException
try:
response = requests.get(url, headers=headers)
2020-02-27 21:54:43 +01:00
response.raise_for_status()
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')))
except Exception:
2020-02-27 21:54:43 +01:00
# Don't retry this URL for 15 minutes
cache.set('netbox_releases_no_retry', url, 900)
2020-02-27 19:36:02 +01:00
logger.exception("Error while fetching {}".format(url))
return []
cache.set('netbox_releases', releases, settings.UPDATE_CACHE_TIMEOUT)
return releases