first commit
This commit is contained in:
26
reporting/transport_registry.py
Normal file
26
reporting/transport_registry.py
Normal file
@@ -0,0 +1,26 @@
|
||||
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
|
||||
Reference in New Issue
Block a user