"""
Provide static plugin management.
"""
from collections.abc import AsyncIterator
from typing import Generic, TypeVar, final
from typing_extensions import override
from betty.factory import Factory
from betty.machine_name import MachineName
from betty.plugin import PluginRepository, Plugin, PluginNotFound
_PluginT = TypeVar("_PluginT", bound=Plugin)
[docs]
@final
class StaticPluginRepository(PluginRepository[_PluginT], Generic[_PluginT]):
"""
A repository that is given a static collection of plugins, and exposes those.
"""
[docs]
def __init__(self, *plugins: type[_PluginT], factory: Factory | None = None):
super().__init__(factory=factory)
self._plugins = {plugin.plugin_id(): plugin for plugin in plugins}