summaryrefslogtreecommitdiff
path: root/pelican/plugins
diff options
context:
space:
mode:
authorFrederik Ring <frederik.ring@gmail.com>2021-01-04 17:13:32 +0100
committerGitHub <noreply@github.com>2021-01-04 17:13:32 +0100
commitdc601059265bfd0722b8d07c67dd1f39b091fbfa (patch)
tree641e65bcde5799d0071ec5f53baf5258f96708c2 /pelican/plugins
parent8033162ba4393db60791b201fb100d1be0f04431 (diff)
downloadpelican-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.py16
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__