def load_plugin(self, identifier: str, *,
dependency_path: Iterable[str] = (),
is_core: bool = False,
) -> Plugin:
if not identifier.isidentifier():
raise ValueError(f"Invalid plugin name. {identifier!r} contains invalid symbol(s).")
if keyword.iskeyword(identifier):
raise ValueError(f"Invalid plugin name. {identifier!r} is a built-in keyword.")
if identifier in self.plugin_registry:
if not dependency_path:
self.logger.warn(f"Plugin {identifier!r} already exists")
return self.plugin_registry[identifier]
for search_path in self.plugin_search_paths:
try:
module_path = self._find_module_path(search_path, identifier)
except OSError:
continue
else:
break
else:
raise FileNotFoundError(
f"Could not find plugin {identifier!r} in any of the search paths:"
+ "".join(f'\n {path!s}' for path in self.plugin_search_paths)
)
plugin = self._load_plugin_as_module(module_path, identifier,
dependency_path=dependency_path)
self._register_plugin(plugin)
return plugin
评论列表
文章目录