From baab200f73d846df12209dad045e163403673b5d Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 5 Feb 2025 10:25:08 -0500 Subject: [PATCH] Handle exceptions on request processors in incompatible plugins, and display status in Plugins page --- netbox/core/plugins.py | 6 +++--- netbox/netbox/middleware.py | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/netbox/core/plugins.py b/netbox/core/plugins.py index e6d09711f..8fed9b3b7 100644 --- a/netbox/core/plugins.py +++ b/netbox/core/plugins.py @@ -77,7 +77,7 @@ def get_local_plugins(plugins=None): local_plugins = {} # Gather all locally-installed plugins - for plugin_name in registry['plugins']['installed']: + for plugin_name in settings.PLUGINS: plugin = importlib.import_module(plugin_name) plugin_config: PluginConfig = plugin.config installed_version = plugin_config.version @@ -91,7 +91,7 @@ def get_local_plugins(plugins=None): tag_line=plugin_config.description, description_short=plugin_config.description, is_local=True, - is_installed=True, + is_installed=plugin_name in registry['plugins']['installed'], installed_version=installed_version, ) @@ -99,7 +99,7 @@ def get_local_plugins(plugins=None): for k, v in local_plugins.items(): if k in plugins: plugins[k].is_local = True - plugins[k].is_installed = True + plugins[k].is_installed = k in registry['plugins']['installed'] plugins[k].installed_version = v.installed_version else: plugins[k] = v diff --git a/netbox/netbox/middleware.py b/netbox/netbox/middleware.py index b9424bd7c..4f9721430 100644 --- a/netbox/netbox/middleware.py +++ b/netbox/netbox/middleware.py @@ -2,6 +2,7 @@ from contextlib import ExitStack import logging import uuid +import warnings from django.conf import settings from django.contrib import auth, messages @@ -37,7 +38,10 @@ class CoreMiddleware: # Apply all registered request processors with ExitStack() as stack: for request_processor in registry['request_processors']: - stack.enter_context(request_processor(request)) + try: + stack.enter_context(request_processor(request)) + except Exception as e: + warnings.warn(f'Failed to initialize request processor {request_processor}: {e}') response = self.get_response(request) # Check if language cookie should be renewed