diff --git a/pelican/plugins/_utils.py b/pelican/plugins/_utils.py index 78c19e54..4e6ec3c5 100644 --- a/pelican/plugins/_utils.py +++ b/pelican/plugins/_utils.py @@ -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: diff --git a/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/__init__.py b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/__init__.py b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/subpackage.py b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/subpackage.py new file mode 100644 index 00000000..ddb0eeca --- /dev/null +++ b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/subpackage.py @@ -0,0 +1,5 @@ +NAME = 'normal subpackage plugin' + + +def register(): + pass diff --git a/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subplugin.py b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subplugin.py new file mode 100644 index 00000000..377c788b --- /dev/null +++ b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subplugin.py @@ -0,0 +1,5 @@ +NAME = 'normal submodule plugin' + + +def register(): + pass diff --git a/pelican/tests/test_plugins.py b/pelican/tests/test_plugins.py index 730aa6d5..06940884 100644 --- a/pelican/tests/test_plugins.py +++ b/pelican/tests/test_plugins.py @@ -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']