diff --git a/bec_widgets/tests/utils.py b/bec_widgets/tests/utils.py index 6351180a..aea98ec8 100644 --- a/bec_widgets/tests/utils.py +++ b/bec_widgets/tests/utils.py @@ -200,7 +200,13 @@ class DMMock: self.devices = DeviceContainer() self.enabled_devices = [device for device in self.devices if device.enabled] - def add_devives(self, devices: list): + def add_devices(self, devices: list): + """ + Add devices to the DeviceContainer. + + Args: + devices (list): List of device instances to add. + """ for device in devices: self.devices[device.name] = device diff --git a/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py b/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py index 69a3d9ca..66c26029 100644 --- a/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +++ b/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py @@ -112,9 +112,12 @@ class DeviceSignalInputBase(BECWidget): # See above convention for Signals and ComputedSignals if isinstance(device, Signal): self._signals = [self._device] - FilterIO.set_selection(widget=self, selection=[self._device]) + self._hinted_signals = [self._device] + self._normal_signals = [] + self._config_signals = [] + FilterIO.set_selection(widget=self, selection=self._signals) return - device_info = device._info["signals"] + device_info = device._info.get("signals", {}) def _update(kind: Kind): return [ diff --git a/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py b/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py index 1a51a661..b9b0b579 100644 --- a/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +++ b/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py @@ -22,6 +22,8 @@ class DeviceComboBox(DeviceInputBase, QComboBox): config: Device input configuration. gui_id: GUI ID. device_filter: Device filter, name of the device class from BECDeviceFilter and BECReadoutPriority. Check DeviceInputBase for more details. + readout_priority_filter: Readout priority filter, name of the readout priority class from BECDeviceFilter and BECReadoutPriority. Check DeviceInputBase for more details. + available_devices: List of available devices, if passed, it sets apply filters to false and device/readout priority filters will not be applied. default: Default device name. arg_name: Argument name, can be used for the other widgets which has to call some other function in bec using correct argument names. """ diff --git a/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py b/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py index 6055999e..3a0f1925 100644 --- a/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +++ b/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py @@ -24,7 +24,9 @@ class DeviceLineEdit(DeviceInputBase, QLineEdit): client: BEC client object. config: Device input configuration. gui_id: GUI ID. - device_filter: Device filter, name of the device class from BECDeviceFilter and ReadoutPriority. Check DeviceInputBase for more details. + device_filter: Device filter, name of the device class from BECDeviceFilter and BECReadoutPriority. Check DeviceInputBase for more details. + readout_priority_filter: Readout priority filter, name of the readout priority class from BECDeviceFilter and BECReadoutPriority. Check DeviceInputBase for more details. + available_devices: List of available devices, if passed, it sets apply filters to false and device/readout priority filters will not be applied. default: Default device name. arg_name: Argument name, can be used for the other widgets which has to call some other function in bec using correct argument names. """ diff --git a/tests/unit_tests/client_mocks.py b/tests/unit_tests/client_mocks.py index 274b4c97..f8d9ca81 100644 --- a/tests/unit_tests/client_mocks.py +++ b/tests/unit_tests/client_mocks.py @@ -30,7 +30,7 @@ def mocked_client(bec_dispatcher): # Mock the device_manager.devices attribute client.connector = connector client.device_manager = DMMock() - client.device_manager.add_devives(DEVICES) + client.device_manager.add_devices(DEVICES) def mock_mv(*args, relative=False): # Extracting motor and value pairs diff --git a/tests/unit_tests/test_device_signal_input.py b/tests/unit_tests/test_device_signal_input.py index 6635de35..c4ac76d7 100644 --- a/tests/unit_tests/test_device_signal_input.py +++ b/tests/unit_tests/test_device_signal_input.py @@ -1,8 +1,10 @@ from unittest import mock import pytest +from bec_lib.device import Signal from qtpy.QtWidgets import QWidget +from bec_widgets.tests.utils import FakeDevice from bec_widgets.utils.ophyd_kind_util import Kind from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter from bec_widgets.widgets.control.device_input.base_classes.device_signal_input_base import ( @@ -18,6 +20,10 @@ from .client_mocks import mocked_client from .conftest import create_widget +class FakeSignal(Signal): + """Fake signal to test the DeviceSignalInputBase.""" + + class DeviceInputWidget(DeviceSignalInputBase, QWidget): """Thin wrapper around DeviceInputBase to make it a QWidget""" @@ -107,6 +113,14 @@ def test_signal_combobox(qtbot, device_signal_combobox): assert device_signal_combobox.signals == ["readback", "setpoint", "velocity"] qtbot.wait(100) assert container == ["samx"] + # Set the type of class from the FakeDevice to Signal + fake_signal = FakeSignal(name="fake_signal") + device_signal_combobox.client.device_manager.add_devices([fake_signal]) + device_signal_combobox.set_device("fake_signal") + assert device_signal_combobox.signals == ["fake_signal"] + assert device_signal_combobox._config_signals == [] + assert device_signal_combobox._normal_signals == [] + assert device_signal_combobox._hinted_signals == ["fake_signal"] def test_signal_lineeidt(device_signal_line_edit):