diff options
| author | Frederik Ring <frederik.ring@gmail.com> | 2021-01-04 17:13:32 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-04 17:13:32 +0100 |
| commit | dc601059265bfd0722b8d07c67dd1f39b091fbfa (patch) | |
| tree | 641e65bcde5799d0071ec5f53baf5258f96708c2 /pelican/plugins | |
| parent | 8033162ba4393db60791b201fb100d1be0f04431 (diff) | |
| download | pelican-dc601059265bfd0722b8d07c67dd1f39b091fbfa.tar.gz | |
Stringify plugin definitions so they can be pickled during caching (#2835)
Diffstat (limited to 'pelican/plugins')
| -rw-r--r-- | pelican/plugins/_utils.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/pelican/plugins/_utils.py b/pelican/plugins/_utils.py index ffe32799..87877b08 100644 --- a/pelican/plugins/_utils.py +++ b/pelican/plugins/_utils.py @@ -1,6 +1,7 @@ import importlib import importlib.machinery import importlib.util +import inspect import logging import pkgutil import sys @@ -107,3 +108,18 @@ def load_plugins(settings): plugins = list(namespace_plugins.values()) return 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, all plugins are + stringified post-initialization. + """ + if inspect.isclass(plugin): + return plugin.__qualname__ + + if inspect.ismodule(plugin): + return plugin.__name__ + + return type(plugin).__qualname__ |
