forked from github/pelican
resolve packages for legacy plugins
Updated legacy plugin loader to handle pakcages if the PLUGINS entry contains `.`. Also adds a test for it.
This commit is contained in:
parent
7a6686f467
commit
991c00af95
6 changed files with 30 additions and 0 deletions
|
|
@ -40,6 +40,11 @@ def list_plugins(ns_pkg=None):
|
|||
|
||||
|
||||
def load_legacy_plugin(plugin, plugin_paths):
|
||||
if '.' in plugin:
|
||||
# it is in a package, try to resolve package first
|
||||
package, _, _ = plugin.rpartition('.')
|
||||
load_legacy_plugin(package, plugin_paths)
|
||||
|
||||
# Try to find plugin in PLUGIN_PATHS
|
||||
spec = importlib.machinery.PathFinder.find_spec(plugin, plugin_paths)
|
||||
if spec is None:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
NAME = 'normal subpackage plugin'
|
||||
|
||||
|
||||
def register():
|
||||
pass
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
NAME = 'normal submodule plugin'
|
||||
|
||||
|
||||
def register():
|
||||
pass
|
||||
|
|
@ -116,6 +116,21 @@ class PluginTest(unittest.TestCase):
|
|||
{'normal plugin'},
|
||||
get_plugin_names(plugins))
|
||||
|
||||
# normal submodule/subpackage plugins
|
||||
SETTINGS = {
|
||||
'PLUGINS': [
|
||||
'normal_submodule_plugin.subplugin',
|
||||
'normal_submodule_plugin.subpackage.subpackage',
|
||||
],
|
||||
'PLUGIN_PATHS': [self._NORMAL_PLUGIN_FOLDER]
|
||||
}
|
||||
plugins = load_plugins(SETTINGS)
|
||||
self.assertEqual(len(plugins), 2, plugins)
|
||||
self.assertEqual(
|
||||
{'normal submodule plugin',
|
||||
'normal subpackage plugin'},
|
||||
get_plugin_names(plugins))
|
||||
|
||||
# namespace plugin short
|
||||
SETTINGS = {
|
||||
'PLUGINS': ['ns_plugin']
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue