Misc cleanup

This commit is contained in:
Jeremy Stretch 2024-08-01 09:51:46 -04:00
parent 65cd124f6f
commit 09024283b8
2 changed files with 11 additions and 7 deletions

View File

@ -5,15 +5,14 @@ from dataclasses import dataclass, field
from typing import Optional
import requests
from django.contrib import messages
from django.conf import settings
from django.core.cache import cache
from django.utils.translation import gettext_lazy as _
from netbox.plugins import PluginConfig
from utilities.datetime import datetime_from_timestamp
USER_AGENT_STRING = f'NetBox/{settings.RELEASE.version} {settings.RELEASE.edition}'
CACHE_KEY_CATALOG_FEED = 'plugins-catalog-feed'
@dataclass
@ -69,11 +68,14 @@ class Plugin:
installed_version: str = ''
def get_local_plugins(plugins={}):
def get_local_plugins(plugins=None):
"""
Return a dictionary of all locally-installed plugins, mapped by name.
"""
plugins = plugins or {}
local_plugins = {}
# Gather all locally-installed plugins
for plugin_name in settings.PLUGINS:
plugin = importlib.import_module(plugin_name)
plugin_config: PluginConfig = plugin.config
@ -88,6 +90,7 @@ def get_local_plugins(plugins={}):
installed_version=plugin_config.version,
)
# Update catalog entries for local plugins, or add them to the list if not listed
for k, v in local_plugins.items():
if k in plugins:
plugins[k].is_local = True
@ -196,11 +199,11 @@ def get_catalog_plugins():
return plugins
catalog_plugins = cache.get('plugins-catalog-feed', default={})
catalog_plugins = cache.get(CACHE_KEY_CATALOG_FEED, default={})
if not catalog_plugins:
try:
catalog_plugins = make_plugin_dict()
cache.set('plugins-catalog-feed', catalog_plugins, 3600)
cache.set(CACHE_KEY_CATALOG_FEED, catalog_plugins, 3600)
except requests.exceptions.RequestException:
pass

View File

@ -651,18 +651,19 @@ class SystemView(UserPassesTestMixin, View):
#
class BasePluginView(UserPassesTestMixin, View):
CACHE_KEY_CATALOG_ERROR = 'plugins-catalog-error'
def test_func(self):
return self.request.user.is_staff
def get_cached_plugins(self, request):
catalog_plugins = {}
catalog_plugins_error = cache.get('plugins-catalog-error', default=False)
catalog_plugins_error = cache.get(self.CACHE_KEY_CATALOG_ERROR, default=False)
if not catalog_plugins_error:
catalog_plugins = get_catalog_plugins()
if not catalog_plugins:
# Cache for 5 minutes to avoid spamming connection
cache.set('plugins-catalog-error', True, 300)
cache.set(self.CACHE_KEY_CATALOG_ERROR, True, 300)
messages.warning(request, _("Plugins catalog could not be loaded"))
return get_local_plugins(catalog_plugins)