From a976837cff612349f2a3f17900903c203bc3d250 Mon Sep 17 00:00:00 2001 From: wyzula-jan Date: Thu, 21 May 2026 10:06:17 +0200 Subject: [PATCH] fix(signal_combobox): signature matched for update_signals_from_filters --- .../signal_combobox/signal_combobox.py | 15 ++++++++++----- tests/unit_tests/test_device_signal_input.py | 9 +++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py b/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py index 03dc0836..72484fb5 100644 --- a/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +++ b/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py @@ -197,16 +197,21 @@ class SignalComboBox(BECWidget, QComboBox): self.update_signals_from_filters() @SafeSlot() - @SafeSlot(dict, dict) - def update_signals_from_filters( - self, content: dict | None = None, metadata: dict | None = None - ): + @SafeSlot(str, dict) + def update_signals_from_filters(self, action: str | None = None, content: dict | None = None): """Refresh available signals from the current device and filters. Args: + action: Optional BEC device update action. If provided, only device list changing + actions trigger a refresh. content: Optional callback payload from BEC device updates. Currently unused. - metadata: Optional callback metadata from BEC device updates. Currently unused. """ + if self._device_update_register is None or getattr(self, "_destroyed", False): + return + + if action is not None and action not in ["add", "remove", "reload"]: + return + self.config.signal_filter = [kind.name for kind in self.signal_filter] if self._signal_class_filter: diff --git a/tests/unit_tests/test_device_signal_input.py b/tests/unit_tests/test_device_signal_input.py index 743a8140..56b90b6d 100644 --- a/tests/unit_tests/test_device_signal_input.py +++ b/tests/unit_tests/test_device_signal_input.py @@ -196,6 +196,15 @@ def test_device_signal_input_base_cleanup(qtbot, mocked_client): assert widget._device_update_register is None +def test_signal_combobox_device_update_ignores_update_action(qtbot, mocked_client): + widget = create_widget(qtbot=qtbot, widget=SignalComboBox, client=mocked_client) + + with mock.patch.object(widget, "_set_signal_groups") as set_signal_groups: + widget.update_signals_from_filters("update", {}) + + set_signal_groups.assert_not_called() + + def test_signal_combobox_get_signal_name_with_item_data(qtbot, device_signal_combobox): """Test get_signal_name returns obj_name from item data when available.""" device_signal_combobox.include_normal_signals = True