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)