from collections.abc import Iterable from core.base import BaseTransport class TransportRegistry: def __init__(self, transports: Iterable[BaseTransport] | None = None) -> None: self._transports: dict[str, BaseTransport] = {} for transport in transports or (): self.register(transport) def register(self, transport: BaseTransport) -> None: if transport.transport_type in self._transports: registered = self._transports[transport.transport_type] raise ValueError( "Transport " f"'{transport.transport_type}' is already registered by {type(registered).__name__}" ) self._transports[transport.transport_type] = transport def get(self, transport_type: str) -> BaseTransport: try: return self._transports[transport_type] except KeyError as exc: raise ValueError(f"Transport '{transport_type}' is not registered") from exc