mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2026-02-08 08:08:41 +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 = []
|
out = []
|
||||||
for signal in signals:
|
for signal in signals:
|
||||||
if isinstance(signal, str):
|
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:
|
elif isinstance(signal, tuple) and len(signal) == 2:
|
||||||
if isinstance(signal[1], Kind):
|
if isinstance(signal[1], Kind):
|
||||||
out.append((signal[0], signal[1].value))
|
out.append((signal[0], signal[1].value))
|
||||||
|
|||||||
@@ -838,15 +838,6 @@ def test_waveform_send_async_update(waveform, mode, index, expected_md):
|
|||||||
wv_shape,
|
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 ###
|
### 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 test_device.name == "test_device"
|
||||||
assert all(
|
assert all(
|
||||||
element in test_device._signals
|
element in test_device._signals
|
||||||
for element in [
|
for element in ["preview_2d", "preview_1d", "file_event", "progress", "dynamic_signal"]
|
||||||
"preview_2d",
|
|
||||||
"preview_1d",
|
|
||||||
"file_event",
|
|
||||||
"progress",
|
|
||||||
"dynamic_signal",
|
|
||||||
# "async_1d",
|
|
||||||
# "async_2d",
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
# No signals are shown when read is called on the device
|
# No signals are shown when read is called on the device
|
||||||
assert test_device.read() == {}
|
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 threading
|
||||||
import time
|
import time
|
||||||
|
from functools import partial
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@@ -10,7 +11,7 @@ from ophyd import Device, EpicsSignalRO, Signal
|
|||||||
from ophyd.status import WaitTimeoutError
|
from ophyd.status import WaitTimeoutError
|
||||||
from typeguard import TypeCheckError
|
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 (
|
from ophyd_devices.utils.bec_signals import (
|
||||||
AsyncMultiSignal,
|
AsyncMultiSignal,
|
||||||
AsyncSignal,
|
AsyncSignal,
|
||||||
@@ -333,17 +334,23 @@ def test_utils_dynamic_signal():
|
|||||||
|
|
||||||
|
|
||||||
def test_utils_dynamic_signal_with_defaults():
|
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")
|
dev = Device(name="device")
|
||||||
signal = DynamicSignal(
|
create_signal = partial(
|
||||||
|
DynamicSignal,
|
||||||
name="dynamic_signal",
|
name="dynamic_signal",
|
||||||
|
parent=dev,
|
||||||
ndim=1,
|
ndim=1,
|
||||||
signals=["sig1", "sig2"],
|
value=None,
|
||||||
async_update={"type": "add", "max_shape": [None, 1000]},
|
async_update={"type": "add", "max_shape": [None, 1000]},
|
||||||
acquisition_group="fly-scanning",
|
acquisition_group="fly-scanning",
|
||||||
value=None,
|
|
||||||
parent=dev,
|
|
||||||
)
|
)
|
||||||
|
signal = create_signal(signals=["sig1", "sig2"])
|
||||||
val = np.random.random(1000)
|
val = np.random.random(1000)
|
||||||
msg_dict = {"dynamic_signal_sig1": {"value": val}}
|
msg_dict = {"dynamic_signal_sig1": {"value": val}}
|
||||||
signal.put(msg_dict)
|
signal.put(msg_dict)
|
||||||
@@ -357,6 +364,11 @@ def test_utils_dynamic_signal_with_defaults():
|
|||||||
reading = signal.read()
|
reading = signal.read()
|
||||||
assert reading[signal.name]["value"].metadata["acquisition_group"] == "different-group"
|
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():
|
def test_utils_async_multi_signal():
|
||||||
"""Test AsyncMultiSignal, which is a DynamicSignal with strict signal validation."""
|
"""Test AsyncMultiSignal, which is a DynamicSignal with strict signal validation."""
|
||||||
|
|||||||
Reference in New Issue
Block a user