fix(scan_control): ScanGroupBox enforce correct device combobox type in correct order

This commit is contained in:
2026-05-12 19:48:42 +02:00
parent 7ca6353eaf
commit dee3bc6998
3 changed files with 18 additions and 2 deletions
@@ -271,9 +271,16 @@ class ScanGroupBox(QGroupBox):
continue
if default == "_empty":
default = None
widget = widget_class(parent=self.parent(), arg_name=arg_name, default=default)
if widget_class is DeviceComboBox:
widget = widget_class(
parent=self.parent(),
arg_name=arg_name,
default=default,
device_filter=BECDeviceFilter.DEVICE,
)
else:
widget = widget_class(parent=self.parent(), arg_name=arg_name, default=default)
if isinstance(widget, DeviceComboBox):
widget.set_device_filter(BECDeviceFilter.DEVICE)
self.selected_devices[widget] = ""
widget.device_selected.connect(self.emit_device_selected)
if isinstance(widget, ScanLiteralsComboBox):
@@ -37,6 +37,8 @@ def test_device_input_combobox_init(device_input_combobox):
assert isinstance(device_input_combobox, DeviceComboBox)
assert device_input_combobox.config.widget_class == "DeviceComboBox"
assert device_input_combobox.isEditable() is True
assert device_input_combobox.currentText() == ""
assert device_input_combobox.is_valid_input is False
assert device_input_combobox.config.device_filter == []
assert device_input_combobox.config.readout_filter == [
ReadoutPriority.MONITORED.value,
+7
View File
@@ -9,6 +9,7 @@ from qtpy.QtCore import QModelIndex, Qt
from bec_widgets.utils.forms_from_types.items import StrFormItem
from bec_widgets.utils.widget_io import WidgetIO
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
from bec_widgets.widgets.control.scan_control import ScanControl
from .client_mocks import mocked_client
@@ -304,6 +305,12 @@ def test_on_scan_selected(scan_control, scan_name):
assert widget is not None # Confirm that a widget exists
expected_widget_type = scan_control.arg_box.WIDGET_HANDLER.get(arg_value, None)
assert isinstance(widget, expected_widget_type) # Confirm the widget type matches
if isinstance(widget, DeviceComboBox):
assert widget.currentText() == ""
assert "samx" in widget.devices
assert (
"async_device" in widget.devices
) # async device should also be present in the device list
# Check kwargs boxes
kwargs_group = [param for param in expected_scan_info["gui_config"]["kwarg_groups"]]