diff --git a/pelican/plugins/_utils.py b/pelican/plugins/_utils.py index 364a1e45..87877b08 100644 --- a/pelican/plugins/_utils.py +++ b/pelican/plugins/_utils.py @@ -116,15 +116,10 @@ def get_plugin_name(plugin): module objects cannot be pickled. To work around this, all plugins are stringified post-initialization. """ - if isinstance(plugin, str): - return plugin - if inspect.isclass(plugin): + return plugin.__qualname__ + + if inspect.ismodule(plugin): return plugin.__name__ - try: - return plugin.__class__.__qualname__ - except AttributeError: - pass - - return str(plugin) + return type(plugin).__qualname__ diff --git a/pelican/tests/dummy_plugins/normal_plugin/normal_plugin/__init__.py b/pelican/tests/dummy_plugins/normal_plugin/normal_plugin/__init__.py index 5838a835..e714c7a6 100644 --- a/pelican/tests/dummy_plugins/normal_plugin/normal_plugin/__init__.py +++ b/pelican/tests/dummy_plugins/normal_plugin/normal_plugin/__init__.py @@ -1,7 +1,5 @@ from .submodule import noop # noqa: F401 -NAME = 'normal plugin' - def register(): pass 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 index ddb0eeca..9e12b19f 100644 --- 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 @@ -1,5 +1,2 @@ -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 index 377c788b..9e12b19f 100644 --- a/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subplugin.py +++ b/pelican/tests/dummy_plugins/normal_plugin/normal_submodule_plugin/subplugin.py @@ -1,5 +1,2 @@ -NAME = 'normal submodule plugin' - - def register(): pass diff --git a/pelican/tests/support.py b/pelican/tests/support.py index 43029575..55ddf625 100644 --- a/pelican/tests/support.py +++ b/pelican/tests/support.py @@ -193,11 +193,6 @@ def get_context(settings=None, **kwargs): return context -class NoopPlugin: - def register(self): - pass - - class LogCountHandler(BufferingHandler): """Capturing and counting logged messages.""" diff --git a/pelican/tests/test_plugins.py b/pelican/tests/test_plugins.py index 27e17aa1..348c3e94 100644 --- a/pelican/tests/test_plugins.py +++ b/pelican/tests/test_plugins.py @@ -1,9 +1,10 @@ import os from contextlib import contextmanager +import pelican.tests.dummy_plugins.normal_plugin.normal_plugin as normal_plugin from pelican.plugins._utils import (get_namespace_plugins, get_plugin_name, load_plugins) -from pelican.tests.support import NoopPlugin, unittest +from pelican.tests.support import unittest @contextmanager @@ -82,9 +83,7 @@ class PluginTest(unittest.TestCase): def test_load_plugins(self): def get_plugin_names(plugins): - return { - plugin.NAME if hasattr(plugin, 'NAME') else plugin.__name__ - for plugin in plugins} + return {get_plugin_name(p) for p in plugins} # existing namespace plugins existing_ns_plugins = load_plugins({}) @@ -94,7 +93,7 @@ class PluginTest(unittest.TestCase): plugins = load_plugins({}) self.assertEqual(len(plugins), len(existing_ns_plugins)+1, plugins) self.assertEqual( - {'namespace plugin'} | get_plugin_names(existing_ns_plugins), + {'pelican.plugins.ns_plugin'} | get_plugin_names(existing_ns_plugins), get_plugin_names(plugins)) # disable namespace plugins with `PLUGINS = []` @@ -114,7 +113,7 @@ class PluginTest(unittest.TestCase): plugins = load_plugins(SETTINGS) self.assertEqual(len(plugins), 1, plugins) self.assertEqual( - {'normal plugin'}, + {'normal_plugin'}, get_plugin_names(plugins)) # normal submodule/subpackage plugins @@ -128,8 +127,8 @@ class PluginTest(unittest.TestCase): plugins = load_plugins(SETTINGS) self.assertEqual(len(plugins), 2, plugins) self.assertEqual( - {'normal submodule plugin', - 'normal subpackage plugin'}, + {'normal_submodule_plugin.subplugin', + 'normal_submodule_plugin.subpackage.subpackage'}, get_plugin_names(plugins)) # ensure normal plugins are loaded only once @@ -150,7 +149,7 @@ class PluginTest(unittest.TestCase): plugins = load_plugins(SETTINGS) self.assertEqual(len(plugins), 1, plugins) self.assertEqual( - {'namespace plugin'}, + {'pelican.plugins.ns_plugin'}, get_plugin_names(plugins)) # namespace plugin long @@ -160,7 +159,7 @@ class PluginTest(unittest.TestCase): plugins = load_plugins(SETTINGS) self.assertEqual(len(plugins), 1, plugins) self.assertEqual( - {'namespace plugin'}, + {'pelican.plugins.ns_plugin'}, get_plugin_names(plugins)) # normal and namespace plugin @@ -171,10 +170,22 @@ class PluginTest(unittest.TestCase): plugins = load_plugins(SETTINGS) self.assertEqual(len(plugins), 2, plugins) self.assertEqual( - {'normal plugin', 'namespace plugin'}, + {'normal_plugin', 'pelican.plugins.ns_plugin'}, get_plugin_names(plugins)) def test_get_plugin_name(self): - self.assertEqual(get_plugin_name('string_plugin'), 'string_plugin') - self.assertEqual(get_plugin_name(NoopPlugin), 'NoopPlugin') - self.assertEqual(get_plugin_name(NoopPlugin()), 'NoopPlugin') + self.assertEqual( + get_plugin_name(normal_plugin), + 'pelican.tests.dummy_plugins.normal_plugin.normal_plugin', + ) + + class NoopPlugin: + def register(self): + pass + + self.assertEqual( + get_plugin_name(NoopPlugin), + 'PluginTest.test_get_plugin_name..NoopPlugin') + self.assertEqual( + get_plugin_name(NoopPlugin()), + 'PluginTest.test_get_plugin_name..NoopPlugin')