summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeniz Turgut <dturgut@gmail.com>2020-10-12 14:50:42 +0300
committerDeniz Turgut <dturgut@gmail.com>2020-10-12 14:50:42 +0300
commit991c00af95ac3cdb197b0d04e7349d801d6c951d (patch)
treed43507252c2febf5341e033e29af51b73d2fa9ac
parent7a6686f4679adabdd690668a4ba7cedaf494e243 (diff)
downloadpelican-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.
-rw-r--r--pelican/plugins/_utils.py5
-rw-r--r--pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/__init__.py0
-rw-r--r--pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/__init__.py0
-rw-r--r--pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subpackage/subpackage.py5
-rw-r--r--pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subplugin.py5
-rw-r--r--pelican/tests/test_plugins.py15
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']