md2txt/plugin_registry.py
2025-10-20 15:03:34 +03:00

25 lines
696 B
Python

from __future__ import annotations
from typing import Dict, Generic, List, TypeVar
T = TypeVar("T")
class PluginRegistry(Generic[T]):
def __init__(self) -> None:
self._factories: Dict[str, T] = {}
def register(self, name: str, factory: T) -> None:
if name in self._factories:
raise ValueError(f"Plugin '{name}' is already registered.")
self._factories[name] = factory
def get(self, name: str) -> T:
try:
return self._factories[name]
except KeyError as exc:
raise KeyError(f"Plugin '{name}' is not registered.") from exc
def names(self) -> List[str]:
return sorted(self._factories.keys())