mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2026-02-09 00:28:40 +01:00
refactor(bec-signals): cleanup and fix logic for unify signal in BECMessageSignal
This commit is contained in:
@@ -158,7 +158,8 @@ class BECMessageSignal(Signal):
|
||||
out = []
|
||||
for signal in signals:
|
||||
if isinstance(signal, str):
|
||||
out.append((signal, Kind.normal.value))
|
||||
kind = Kind.hinted.value if len(signals) == 1 else Kind.normal.value
|
||||
out.append((signal, kind))
|
||||
elif isinstance(signal, tuple) and len(signal) == 2:
|
||||
if isinstance(signal[1], Kind):
|
||||
out.append((signal[0], signal[1].value))
|
||||
|
||||
@@ -838,15 +838,6 @@ def test_waveform_send_async_update(waveform, mode, index, expected_md):
|
||||
wv_shape,
|
||||
)
|
||||
|
||||
# assert np.array_equal(reading[waveform.data.name]["value"], value)
|
||||
# assert waveform.data.get()
|
||||
# with mock.patch.object(waveform.connector, "xadd") as mock_xadd:
|
||||
# waveform._send_async_update(index=index, value=value)
|
||||
# # Check here that metadata is properly set
|
||||
# args, kwargs = mock_xadd.call_args
|
||||
# msg = args[1]["data"]
|
||||
# assert msg.metadata == expected_md
|
||||
|
||||
|
||||
#####################################
|
||||
### Test PSiComponent test device ###
|
||||
@@ -864,29 +855,7 @@ def test_simulation_sim_camera_with_psi_component(test_device):
|
||||
assert test_device.name == "test_device"
|
||||
assert all(
|
||||
element in test_device._signals
|
||||
for element in [
|
||||
"preview_2d",
|
||||
"preview_1d",
|
||||
"file_event",
|
||||
"progress",
|
||||
"dynamic_signal",
|
||||
# "async_1d",
|
||||
# "async_2d",
|
||||
]
|
||||
for element in ["preview_2d", "preview_1d", "file_event", "progress", "dynamic_signal"]
|
||||
)
|
||||
# No signals are shown when read is called on the device
|
||||
assert test_device.read() == {}
|
||||
### Commented out because the async signals are not implemented yet, cf. issue #104
|
||||
|
||||
# Hinted and normal signals
|
||||
# assert list(test_device.async_1d.read().keys()) == [
|
||||
# "test_device_async_1d_signal1",
|
||||
# "test_device_async_1d_signal2",
|
||||
# ]
|
||||
# assert list(test_device.async_2d.read().keys()) == [
|
||||
# "test_device_async_2d_signal1",
|
||||
# "test_device_async_2d_signal2",
|
||||
# ]
|
||||
# # Config signals
|
||||
# assert "test_device_async_1d_signal3" in test_device.async_1d.read_configuration()
|
||||
# assert "test_device_async_2d_signal3" in test_device.async_2d.read_configuration()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import threading
|
||||
import time
|
||||
from functools import partial
|
||||
from unittest import mock
|
||||
|
||||
import numpy as np
|
||||
@@ -10,7 +11,7 @@ from ophyd import Device, EpicsSignalRO, Signal
|
||||
from ophyd.status import WaitTimeoutError
|
||||
from typeguard import TypeCheckError
|
||||
|
||||
from ophyd_devices.tests.utils import MockPV, patch_dual_pvs
|
||||
from ophyd_devices.tests.utils import MockPV
|
||||
from ophyd_devices.utils.bec_signals import (
|
||||
AsyncMultiSignal,
|
||||
AsyncSignal,
|
||||
@@ -333,17 +334,23 @@ def test_utils_dynamic_signal():
|
||||
|
||||
|
||||
def test_utils_dynamic_signal_with_defaults():
|
||||
"""Test DynamicSignal with async_update and acquisition group defaults"""
|
||||
"""
|
||||
Test DynamicSignal with async_update and acquisition group defaults. If only
|
||||
one sub-signal is provided for the dynamic signal, the name of the sub-signal
|
||||
will be used in the signals dict and a warning will be issued that the sub-signal
|
||||
name is being ignored.
|
||||
"""
|
||||
dev = Device(name="device")
|
||||
signal = DynamicSignal(
|
||||
create_signal = partial(
|
||||
DynamicSignal,
|
||||
name="dynamic_signal",
|
||||
parent=dev,
|
||||
ndim=1,
|
||||
signals=["sig1", "sig2"],
|
||||
value=None,
|
||||
async_update={"type": "add", "max_shape": [None, 1000]},
|
||||
acquisition_group="fly-scanning",
|
||||
value=None,
|
||||
parent=dev,
|
||||
)
|
||||
signal = create_signal(signals=["sig1", "sig2"])
|
||||
val = np.random.random(1000)
|
||||
msg_dict = {"dynamic_signal_sig1": {"value": val}}
|
||||
signal.put(msg_dict)
|
||||
@@ -357,6 +364,11 @@ def test_utils_dynamic_signal_with_defaults():
|
||||
reading = signal.read()
|
||||
assert reading[signal.name]["value"].metadata["acquisition_group"] == "different-group"
|
||||
|
||||
# Test init variations for single signal
|
||||
for signal in [["sig1"], "sig1", None]:
|
||||
signal = create_signal(signals=signal)
|
||||
assert signal.signals == [(signal.name, ophyd.Kind.hinted.value)]
|
||||
|
||||
|
||||
def test_utils_async_multi_signal():
|
||||
"""Test AsyncMultiSignal, which is a DynamicSignal with strict signal validation."""
|
||||
|
||||
Reference in New Issue
Block a user