Source code for xpublish.plugins.manage
"""Load and configure Xpublish plugins from entry point group `xpublish.plugin`."""
from importlib.metadata import entry_points
from typing import Dict, Iterable, Optional, Type
from .hooks import Plugin
[docs]
def find_default_plugins(
exclude_plugins: Optional[Iterable[str]] = None,
) -> Dict[str, Type[Plugin]]:
"""Find Xpublish plugins from entry point group `xpublish.plugin`.
Args:
exclude_plugins: A list of plugin names to ignore.
Returns:
A dictionary of plugin names and classes.
"""
exclude_plugins = set(exclude_plugins or [])
plugins: Dict[str, Type[Plugin]] = {}
try:
plugin_entry_points = entry_points(group='xpublish.plugin')
except TypeError:
plugin_entry_points = entry_points()['xpublish.plugin']
for entry_point in plugin_entry_points:
if entry_point.name not in exclude_plugins:
plugins[entry_point.name] = entry_point.load()
return plugins
[docs]
def load_default_plugins(
exclude_plugins: Optional[Iterable[str]] = None,
) -> Dict[str, Plugin]:
"""Find and initialize plugins from entry point group `xpublish.plugin`.
Args:
exclude_plugins: A list of plugin names to ignore.
Returns:
A dictionary of plugin names and instances.
"""
initialized_plugins: Dict[str, Plugin] = {}
for name, plugin in find_default_plugins(exclude_plugins=exclude_plugins).items():
initialized_plugins[name] = plugin()
return initialized_plugins