mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
refactor: rework plugin init and renaming in settings
This commit is contained in:
parent
2ac63f53f6
commit
4dcb7dde10
3 changed files with 23 additions and 24 deletions
|
|
@ -20,7 +20,7 @@ from pelican.generators import (ArticlesGenerator, # noqa: I100
|
|||
PagesGenerator, SourceFileGenerator,
|
||||
StaticGenerator, TemplatePagesGenerator)
|
||||
from pelican.plugins import signals
|
||||
from pelican.plugins._utils import load_plugins, stringify_plugins
|
||||
from pelican.plugins._utils import get_plugin_name, load_plugins
|
||||
from pelican.readers import Readers
|
||||
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
|
||||
from pelican.settings import coerce_overrides, read_settings
|
||||
|
|
@ -65,17 +65,18 @@ class Pelican:
|
|||
sys.path.insert(0, '')
|
||||
|
||||
def init_plugins(self):
|
||||
self.plugins = load_plugins(self.settings)
|
||||
for plugin in self.plugins:
|
||||
logger.debug('Registering plugin `%s`', plugin.__name__)
|
||||
self.plugins = []
|
||||
for plugin in load_plugins(self.settings):
|
||||
name = get_plugin_name(plugin)
|
||||
logger.debug('Registering plugin `%s`', name)
|
||||
try:
|
||||
plugin.register()
|
||||
self.plugins.append(plugin)
|
||||
except Exception as e:
|
||||
logger.error('Cannot register plugin `%s`\n%s',
|
||||
plugin.__name__, e)
|
||||
name, e)
|
||||
|
||||
if 'PLUGINS' in self.settings and self.settings['PLUGINS'] is not None:
|
||||
self.settings['PLUGINS'] = stringify_plugins(self.settings['PLUGINS'])
|
||||
self.settings['PLUGINS'] = [get_plugin_name(p) for p in self.plugins]
|
||||
|
||||
def run(self):
|
||||
"""Run the generators and return"""
|
||||
|
|
|
|||
|
|
@ -110,20 +110,21 @@ def load_plugins(settings):
|
|||
return plugins
|
||||
|
||||
|
||||
def stringify_plugins(plugins):
|
||||
def get_plugin_name(plugin):
|
||||
"""
|
||||
Plugins can be passed as module objects, however this breaks caching as
|
||||
module objects cannot be pickled. To work around this, we stringify all
|
||||
plugin definitions post-initialization.
|
||||
module objects cannot be pickled. To work around this, all plugins are
|
||||
stringified post-initialization.
|
||||
"""
|
||||
return [_stringify_plugin(p) for p in plugins]
|
||||
|
||||
|
||||
def _stringify_plugin(plugin):
|
||||
if isinstance(plugin, str):
|
||||
return plugin
|
||||
|
||||
if inspect.isclass(plugin):
|
||||
return plugin.__name__
|
||||
|
||||
return plugin.__class__.__qualname__
|
||||
try:
|
||||
return plugin.__class__.__qualname__
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
return str(plugin)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import os
|
||||
from contextlib import contextmanager
|
||||
|
||||
from pelican.plugins._utils import (get_namespace_plugins, load_plugins,
|
||||
stringify_plugins)
|
||||
from pelican.plugins._utils import (get_namespace_plugins, get_plugin_name,
|
||||
load_plugins)
|
||||
from pelican.tests.support import NoopPlugin, unittest
|
||||
|
||||
|
||||
|
|
@ -174,10 +174,7 @@ class PluginTest(unittest.TestCase):
|
|||
{'normal plugin', 'namespace plugin'},
|
||||
get_plugin_names(plugins))
|
||||
|
||||
def test_stringify_plugins(self):
|
||||
result = stringify_plugins(['string_plugin', NoopPlugin()])
|
||||
# Plugins are converted to string references
|
||||
self.assertCountEqual(
|
||||
['string_plugin', 'NoopPlugin'],
|
||||
result
|
||||
)
|
||||
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')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue