|
@@ -1,5 +1,6 @@
|
|
|
import re
|
|
import re
|
|
|
from collections import namedtuple
|
|
from collections import namedtuple
|
|
|
|
|
+import logging
|
|
|
|
|
|
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
|
from django.contrib import messages
|
|
from django.contrib import messages
|
|
@@ -28,6 +29,8 @@ __all__ = (
|
|
|
'SearchView',
|
|
'SearchView',
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+logger = logging.getLogger(f'netbox.{__name__}')
|
|
|
|
|
+
|
|
|
Link = namedtuple('Link', ('label', 'viewname', 'permission', 'count'))
|
|
Link = namedtuple('Link', ('label', 'viewname', 'permission', 'count'))
|
|
|
|
|
|
|
|
|
|
|
|
@@ -50,7 +53,14 @@ class HomeView(ConditionalLoginRequiredMixin, View):
|
|
|
# Check whether a new release is available. (Only for superusers.)
|
|
# Check whether a new release is available. (Only for superusers.)
|
|
|
new_release = None
|
|
new_release = None
|
|
|
if request.user.is_superuser:
|
|
if request.user.is_superuser:
|
|
|
- latest_release = cache.get('latest_release')
|
|
|
|
|
|
|
+ # cache.get() can raise an exception if the cached value can't be unpickled after dependency upgrades
|
|
|
|
|
+ try:
|
|
|
|
|
+ latest_release = cache.get('latest_release')
|
|
|
|
|
+ except Exception:
|
|
|
|
|
+ logger.debug("Failed to read 'latest_release' from cache; deleting key", exc_info=True)
|
|
|
|
|
+ cache.delete('latest_release')
|
|
|
|
|
+ latest_release = None
|
|
|
|
|
+
|
|
|
if latest_release:
|
|
if latest_release:
|
|
|
release_version, release_url = latest_release
|
|
release_version, release_url = latest_release
|
|
|
if release_version > version.parse(settings.RELEASE.version):
|
|
if release_version > version.parse(settings.RELEASE.version):
|