Source code for betty.plugin.entry_point
"""
Integrates the plugin API with `distribution packages <https://packaging.python.org/en/latest/glossary/#term-Distribution-Package>`_.
Read more at :doc:`/usage/plugin/entry_point`.
"""
from importlib import metadata
from typing import Generic, TypeVar, final, Mapping
from betty.plugin import Plugin
from betty.plugin.lazy import LazyPluginRepositoryBase
_PluginT = TypeVar("_PluginT", bound=Plugin)
[docs]
@final
class EntryPointPluginRepository(LazyPluginRepositoryBase[_PluginT], Generic[_PluginT]):
"""
Discover plugins defined as `distribution package <https://packaging.python.org/en/latest/glossary/#term-Distribution-Package>`_ entry points.
"""
[docs]
def __init__(self, entry_point_group: str):
super().__init__()
self._entry_point_group = entry_point_group
async def _load_plugins(self) -> Mapping[str, type[_PluginT]]:
return {
entry_point.name: entry_point.load()
for entry_point in metadata.entry_points(
group=self._entry_point_group,
)
}