From 2cae87d138a592a93b2474a04dd2cfeaeb77813a Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 20 Oct 2025 11:45:41 +1100 Subject: [PATCH] Tweak for plugin loading (#10631) Prevent plugin install on server launch under certain conditions --- src/backend/InvenTree/plugin/registry.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index 4b3af95cc7..8c669b4d3b 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -27,10 +27,10 @@ from django.utils.translation import gettext_lazy as _ import structlog import InvenTree.cache +import InvenTree.ready from common.settings import get_global_setting, set_global_setting from InvenTree.config import get_plugin_dir from InvenTree.exceptions import log_error -from InvenTree.ready import canAppAccessDatabase from .helpers import ( IntegrationPluginError, @@ -152,8 +152,18 @@ class PluginsRegistry: # Install plugins from file (if required) if InvenTreeSetting.get_setting('PLUGIN_ON_STARTUP', create=False, cache=False): - # make sure all plugins are installed - registry.install_plugin_file() + if InvenTree.ready.isInTestMode() and not settings.PLUGIN_TESTING: + # Ignore plugin reload in test mode + pass + elif InvenTree.ready.isRunningBackup(): + # Ignore plugin reload during backup + pass + elif InvenTree.ready.isGeneratingSchema(): + # Ignore plugin reload during schema generation + pass + elif InvenTree.ready.isInWorkerThread() or InvenTree.ready.isInMainThread(): + # make sure all plugins are installed + registry.install_plugin_file() # Perform initial plugin discovery self.reload_plugins(full_reload=True, force_reload=True, collect=True) @@ -375,7 +385,7 @@ class PluginsRegistry: logger.debug('Finished loading plugins') # Trigger plugins_loaded event - if canAppAccessDatabase(): + if InvenTree.ready.canAppAccessDatabase(): from plugin.events import PluginEvents, trigger_event trigger_event(PluginEvents.PLUGINS_LOADED) @@ -1033,7 +1043,7 @@ class PluginsRegistry: # Skip if running during unit testing return False - if not canAppAccessDatabase( + if not InvenTree.ready.canAppAccessDatabase( allow_shell=True, allow_test=settings.PLUGIN_TESTING_RELOAD ): # Skip check if database cannot be accessed