background_tasks.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import logging
  2. import requests
  3. from cacheops import cache
  4. from django.conf import settings
  5. from django_rq import job
  6. from packaging import version
  7. # Get an instance of a logger
  8. logger = logging.getLogger(__name__)
  9. @job
  10. def get_releases(pre_releases=False):
  11. url = '{}/releases'.format(settings.UPDATE_REPO_URL)
  12. headers = {
  13. 'Accept': 'application/vnd.github.v3+json',
  14. }
  15. releases = []
  16. # noinspection PyBroadException
  17. try:
  18. response = requests.get(url, headers=headers)
  19. for release in response.json():
  20. if 'tag_name' not in release:
  21. continue
  22. if not pre_releases and (release.get('is_devrelease') or release.get('is_prerelease')):
  23. continue
  24. releases.append((version.parse(release['tag_name']), release.get('html_url')))
  25. except Exception:
  26. logger.exception("Error while fetching {}".format(url))
  27. return []
  28. logger.debug("Found NetBox releases {}".format([str(release) for release, url in releases]))
  29. cache.set('netbox_releases', releases, settings.UPDATE_CACHE_TIMEOUT)
  30. return releases