diff options
author | Deniz Turgut <dturgut@gmail.com> | 2020-10-12 14:50:42 +0300 |
---|---|---|
committer | Deniz Turgut <dturgut@gmail.com> | 2020-10-12 14:50:42 +0300 |
commit | 991c00af95ac3cdb197b0d04e7349d801d6c951d (patch) | |
tree | d43507252c2febf5341e033e29af51b73d2fa9ac | |
parent | 7a6686f4679adabdd690668a4ba7cedaf494e243 (diff) | |
download | pelican-991c00af95ac3cdb197b0d04e7349d801d6c951d.tar.gz |
resolve packages for legacy plugins
Updated legacy plugin loader to handle pakcages if the PLUGINS entry
contains `.`. Also adds a test for it.
6 files changed, 30 insertions, 0 deletions
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 --- /dev/null +++ b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/__init__.py 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 --- /dev/null +++ b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/__init__.py 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'] |