Source code for leads.dt.controller
from typing import override as _override, overload as _overload
from leads.dt.device import Device
[docs]
class Controller(Device):
@_overload
def __init__(self, *args, **kwargs) -> None: # real signature unknown
raise NotImplementedError
def __init__(self) -> None:
super().__init__()
self._devices: dict[str, Device] = {}
[docs]
def _attach_device(self, tag: str, device: Device) -> None:
self._devices[tag] = device
device.tag(tag)
device.lock_tag()
[docs]
def devices(self) -> list[Device]:
"""
:return: the device list
"""
return list(self._devices.values())
[docs]
def device(self, tag: str, device: Device | None = None) -> Device | None:
"""
Set or get a device by tag. The device's tag will be overwritten.
:param tag: tag of the device (it shares the global namespace)
:param device: the device or None if getter mode
:return: the device or None if setter mode
"""
if device is None:
return self._devices[tag]
self._attach_device(tag, device)
[docs]
@_override
def initialize(self, *parent_tags: str) -> None:
super().initialize(*parent_tags)
for device in self._devices.values():
device.initialize(*self._parent_tags, self._tag)