Fix plugins running twice in autoreload mode

Fixes #2817
This commit is contained in:
shniubobo 2020-10-31 20:34:45 +08:00
commit 587e1a4ad8
No known key found for this signature in database
GPG key ID: 7EF929CD0B45522D
2 changed files with 14 additions and 0 deletions

View file

@ -53,6 +53,9 @@ def load_legacy_plugin(plugin, plugin_paths):
if spec is None:
raise ImportError('Cannot import plugin `{}`'.format(plugin))
else:
# Avoid loading the same plugin twice
if spec.name in sys.modules:
return sys.modules[spec.name]
# create module object from spec
mod = importlib.util.module_from_spec(spec)
# place it into sys.modules cache

View file

@ -131,6 +131,17 @@ class PluginTest(unittest.TestCase):
'normal subpackage plugin'},
get_plugin_names(plugins))
# ensure normal plugins are loaded only once
SETTINGS = {
'PLUGINS': ['normal_plugin'],
'PLUGIN_PATHS': [self._NORMAL_PLUGIN_FOLDER],
}
plugins = load_plugins(SETTINGS)
for plugin in load_plugins(SETTINGS):
# The second load_plugins() should return the same plugin
# objects as the first one
self.assertIn(plugin, plugins)
# namespace plugin short
SETTINGS = {
'PLUGINS': ['ns_plugin']