Source code for semi_cr.core.lab.station.context.bindings

from collections.abc import Iterator
from typing import Any

from .models import RuntimeBinding


[docs] class RuntimeBindingRegistry: def __init__(self) -> None: self._by_static_id: dict[str, RuntimeBinding] = {}
[docs] def bind( self, static_id: str, runtime_id: str, runtime_object: Any, ) -> None: self._by_static_id[static_id] = RuntimeBinding( static_id=static_id, runtime_id=runtime_id, runtime_object=runtime_object, )
[docs] def resolve(self, static_id: str) -> Any: try: return self._by_static_id[static_id].runtime_object except KeyError as exc: raise KeyError( f"No runtime binding exists for {static_id!r}." ) from exc
[docs] def get_binding(self, static_id: str) -> RuntimeBinding: return self._by_static_id[static_id]
[docs] def is_bound(self, static_id: str) -> bool: return static_id in self._by_static_id
[docs] def items(self) -> Iterator[tuple[str, RuntimeBinding]]: return iter(self._by_static_id.items())
[docs] def values(self) -> Iterator[RuntimeBinding]: return iter(self._by_static_id.values())
def __len__(self) -> int: return len(self._by_static_id)