This commit is contained in:
Yasser Tahiri 2023-06-19 10:01:44 +04:00
commit b880bfadaa

View file

@ -53,27 +53,28 @@ def load_legacy_plugin(plugin, plugin_paths):
spec = importlib.util.find_spec(plugin) spec = importlib.util.find_spec(plugin)
if spec is None: if spec is None:
raise ImportError('Cannot import plugin `{}`'.format(plugin)) raise ImportError('Cannot import plugin `{}`'.format(plugin))
# Avoid loading the same plugin twice else:
if spec.name in sys.modules: # Avoid loading the same plugin twice
return sys.modules[spec.name] if spec.name in sys.modules:
# create module object from spec return sys.modules[spec.name]
mod = importlib.util.module_from_spec(spec) # create module object from spec
# place it into sys.modules cache mod = importlib.util.module_from_spec(spec)
# necessary if module imports itself at some point (e.g. packages) # place it into sys.modules cache
sys.modules[spec.name] = mod # necessary if module imports itself at some point (e.g. packages)
try: sys.modules[spec.name] = mod
# try to execute it inside module object
spec.loader.exec_module(mod)
except Exception: # problem with import
try: try:
# remove module from sys.modules since it can't be loaded # try to execute it inside module object
del sys.modules[spec.name] spec.loader.exec_module(mod)
except KeyError: except Exception: # problem with import
pass try:
raise # remove module from sys.modules since it can't be loaded
del sys.modules[spec.name]
except KeyError:
pass
raise
# if all went well, we have the plugin module # if all went well, we have the plugin module
return mod return mod
def load_plugins(settings): def load_plugins(settings):