mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2025-06-06 03:40:41 +02:00
fix(bec_signals): fix validation of async signals
This commit is contained in:
parent
8e76ad63cb
commit
18f7c56b99
@ -90,7 +90,7 @@ class SimWaveform(Device):
|
||||
compute_readback=True,
|
||||
kind=Kind.hinted,
|
||||
)
|
||||
data = Cpt(AsyncSignal, name="data", ndim=1)
|
||||
data = Cpt(AsyncSignal, name="data", ndim=1, max_size=1000)
|
||||
# Can be extend or append
|
||||
async_update = Cpt(AsyncUpdateSignal, value="add", kind=Kind.config)
|
||||
slice_size = Cpt(SetableSignal, value=100, dtype=np.int32, kind=Kind.config)
|
||||
@ -132,13 +132,13 @@ class SimWaveform(Device):
|
||||
"""Delay updates in-between slices specified by waveform_shape and slice_size."""
|
||||
return self._delay_slice_update
|
||||
|
||||
@typechecked
|
||||
@delay_slice_update.setter
|
||||
@typechecked
|
||||
def delay_slice_update(self, value: bool) -> None:
|
||||
self._delay_slice_update = value
|
||||
|
||||
@property
|
||||
def registered_proxies(self) -> None:
|
||||
def registered_proxies(self) -> dict[str, Any]:
|
||||
"""Dictionary of registered signal_names and proxies."""
|
||||
return self._registered_proxies
|
||||
|
||||
@ -229,6 +229,11 @@ class SimWaveform(Device):
|
||||
signals={self.waveform.name: {"value": value, "timestamp": time.time()}},
|
||||
metadata=metadata,
|
||||
)
|
||||
|
||||
self.data.put(
|
||||
{self.data.name: {"value": value, "timestamp": time.time()}}, metadata=metadata
|
||||
)
|
||||
|
||||
# Send the message to BEC
|
||||
self.connector.xadd(
|
||||
MessageEndpoints.device_async_readback(
|
||||
|
@ -695,7 +695,13 @@ class DynamicSignal(BECMessageSignal):
|
||||
|
||||
def _check_signals(self, msg: messages.DeviceMessage) -> None:
|
||||
"""Check if all signals are valid."""
|
||||
available_signals = [name for name, _ in self.signals]
|
||||
if len(self.signals) == 1:
|
||||
if self.name not in msg.signals:
|
||||
raise ValueError(
|
||||
f"Signal {self.name} not found in message {list(msg.signals.keys())}"
|
||||
)
|
||||
return
|
||||
available_signals = [f"{self.name}_{name}" for name, _ in self.signals]
|
||||
if self.strict_signal_validation:
|
||||
if set(msg.signals.keys()) != set(available_signals):
|
||||
raise ValueError(
|
||||
@ -744,6 +750,7 @@ class AsyncSignal(DynamicSignal):
|
||||
*,
|
||||
name: str,
|
||||
ndim: Literal[0, 1, 2],
|
||||
max_size: int,
|
||||
value: messages.DeviceMessage | dict | None = None,
|
||||
async_update: dict | None = None,
|
||||
**kwargs,
|
||||
@ -753,7 +760,10 @@ class AsyncSignal(DynamicSignal):
|
||||
|
||||
Args:
|
||||
name (str): The name of the signal.
|
||||
ndim (Literal[0, 1, 2]): The number of dimensions of the signal(s).
|
||||
max_size (int): The maximum size of the signal buffer.
|
||||
value (AsyncMessage | dict | None): The initial value of the signal. Defaults to None.
|
||||
async_update (dict | None): Additional metadata for asynchronous updates. Defaults to None.
|
||||
"""
|
||||
kwargs.pop("kind", None) # Ignore kind if specified
|
||||
super().__init__(
|
||||
@ -766,5 +776,6 @@ class AsyncSignal(DynamicSignal):
|
||||
value=value,
|
||||
bec_message_type=messages.DeviceMessage,
|
||||
async_update=async_update,
|
||||
signal_metadata={"max_size": max_size},
|
||||
**kwargs,
|
||||
)
|
||||
|
@ -282,7 +282,7 @@ def test_utils_dynamic_signal():
|
||||
}
|
||||
|
||||
# Put works with Message
|
||||
msg_dict = {"sig1": {"value": 1}, "sig2": {"value": 2}}
|
||||
msg_dict = {"dynamic_signal_sig1": {"value": 1}, "dynamic_signal_sig2": {"value": 2}}
|
||||
msg = messages.DeviceMessage(signals=msg_dict)
|
||||
signal.put(msg)
|
||||
reading = signal.read()
|
||||
|
Loading…
x
Reference in New Issue
Block a user