feat(bec signals): validate async updates

This commit is contained in:
2025-11-13 18:47:15 +01:00
committed by Klaus Wakonig
parent 6ff3a5cc93
commit c84a8c2902

View File

@@ -735,6 +735,7 @@ class DynamicSignal(BECMessageSignal):
"Ignoring metadata, async_update and acquisition_group arguments when value is a DeviceMessage." "Ignoring metadata, async_update and acquisition_group arguments when value is a DeviceMessage."
) )
self._check_signals(value) self._check_signals(value)
self._check_async_update(value)
return super().put(value, **kwargs) return super().put(value, **kwargs)
try: try:
metadata = metadata or {} metadata = metadata or {}
@@ -751,8 +752,23 @@ class DynamicSignal(BECMessageSignal):
except ValidationError as exc: except ValidationError as exc:
raise ValueError(f"Error setting signal {self.name}: {exc}") from exc raise ValueError(f"Error setting signal {self.name}: {exc}") from exc
self._check_signals(msg) self._check_signals(msg)
self._check_async_update(msg)
return super().put(msg, **kwargs) return super().put(msg, **kwargs)
def _check_async_update(self, msg: messages.DeviceMessage) -> None:
"""Check if async_update metadata is present."""
if "async_update" not in msg.metadata:
raise ValueError(
f"Async update must be provided for signal {self.name} of class {self.__class__.__name__}."
)
if not isinstance(msg.metadata["async_update"], dict):
raise ValueError(
f"Async update metadata must be a dict for signal {self.name} of class {self.__class__.__name__}."
)
# Validate async_update using DeviceAsyncUpdate model
messages.DeviceAsyncUpdate(**msg.metadata["async_update"])
def _check_signals(self, msg: messages.DeviceMessage) -> None: def _check_signals(self, msg: messages.DeviceMessage) -> None:
"""Check if all signals are valid, and if relevant metadata is also present.""" """Check if all signals are valid, and if relevant metadata is also present."""
if len(self.signals) == 1: if len(self.signals) == 1: