Handle exceptions on request processors in incompatible plugins, and display status in Plugins page

This commit is contained in:
Brian Tiemann 2025-02-05 10:25:08 -05:00
parent dd2ca387a5
commit baab200f73
2 changed files with 8 additions and 4 deletions

View File

@ -77,7 +77,7 @@ def get_local_plugins(plugins=None):
local_plugins = {} local_plugins = {}
# Gather all locally-installed 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 = importlib.import_module(plugin_name)
plugin_config: PluginConfig = plugin.config plugin_config: PluginConfig = plugin.config
installed_version = plugin_config.version installed_version = plugin_config.version
@ -91,7 +91,7 @@ def get_local_plugins(plugins=None):
tag_line=plugin_config.description, tag_line=plugin_config.description,
description_short=plugin_config.description, description_short=plugin_config.description,
is_local=True, is_local=True,
is_installed=True, is_installed=plugin_name in registry['plugins']['installed'],
installed_version=installed_version, installed_version=installed_version,
) )
@ -99,7 +99,7 @@ def get_local_plugins(plugins=None):
for k, v in local_plugins.items(): for k, v in local_plugins.items():
if k in plugins: if k in plugins:
plugins[k].is_local = True 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 plugins[k].installed_version = v.installed_version
else: else:
plugins[k] = v plugins[k] = v

View File

@ -2,6 +2,7 @@ from contextlib import ExitStack
import logging import logging
import uuid import uuid
import warnings
from django.conf import settings from django.conf import settings
from django.contrib import auth, messages from django.contrib import auth, messages
@ -37,7 +38,10 @@ class CoreMiddleware:
# Apply all registered request processors # Apply all registered request processors
with ExitStack() as stack: with ExitStack() as stack:
for request_processor in registry['request_processors']: for request_processor in registry['request_processors']:
try:
stack.enter_context(request_processor(request)) 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) response = self.get_response(request)
# Check if language cookie should be renewed # Check if language cookie should be renewed