vpn/app/core/registry.py
2026-09-23 01:19:36 +00:00

27 lines
845 B
Python

from __future__ import annotations
from collections.abc import Callable
from app.core.interface import EngineBackend
from app.models import EngineKind
BackendFactory = Callable[[], EngineBackend]
class BackendRegistry:
def __init__(self) -> None:
self._factories: dict[EngineKind, BackendFactory] = {}
def register(self, kind: EngineKind, factory: BackendFactory) -> None:
if kind in self._factories:
raise ValueError(f"backend already registered: {kind}")
self._factories[kind] = factory
def create(self, kind: EngineKind) -> EngineBackend:
try:
return self._factories[kind]()
except KeyError as exc:
raise KeyError(f"backend is not registered: {kind}") from exc
def kinds(self) -> tuple[EngineKind, ...]:
return tuple(self._factories)