Stringify plugin definitions so they can be pickled during caching (#2835)

This commit is contained in:
Frederik Ring 2021-01-04 17:13:32 +01:00 committed by GitHub
commit dc60105926
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 56 additions and 24 deletions

View file

@ -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__