27 lines
986 B
Python
27 lines
986 B
Python
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
|