0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

fix: (#572) signal input base filter

use name attribute rather than value from Kind, to compare with kind_str
This commit is contained in:
2025-05-16 10:17:09 +02:00
committed by Jan Wyzula
parent a42dcec6d4
commit 7d7a88669f
3 changed files with 37 additions and 36 deletions

View File

@ -96,9 +96,9 @@ class FakePositioner(BECPositioner):
} }
self._info = { self._info = {
"signals": { "signals": {
"readback": {"kind_str": "5"}, # hinted "readback": {"kind_str": "hinted"}, # hinted
"setpoint": {"kind_str": "1"}, # normal "setpoint": {"kind_str": "normal"}, # normal
"velocity": {"kind_str": "2"}, # config "velocity": {"kind_str": "config"}, # config
} }
} }
self.signals = { self.signals = {

View File

@ -36,14 +36,16 @@ class DeviceSignalInputBase(BECWidget):
Kind.config: "include_config_signals", Kind.config: "include_config_signals",
} }
def __init__(self, client=None, config=None, gui_id: str = None, **kwargs): def __init__(
if config is None: self,
config = DeviceSignalInputBaseConfig(widget_class=self.__class__.__name__) client=None,
else: config: DeviceSignalInputBaseConfig | dict | None = None,
if isinstance(config, dict): gui_id: str = None,
config = DeviceSignalInputBaseConfig(**config) **kwargs,
self.config = config ):
super().__init__(client=client, config=config, gui_id=gui_id, **kwargs)
self.config = self._process_config_input(config)
super().__init__(client=client, config=self.config, gui_id=gui_id, **kwargs)
self._device = None self._device = None
self.get_bec_shortcuts() self.get_bec_shortcuts()
@ -102,10 +104,7 @@ class DeviceSignalInputBase(BECWidget):
""" """
self.config.signal_filter = self.signal_filter self.config.signal_filter = self.signal_filter
# pylint: disable=protected-access # pylint: disable=protected-access
self._hinted_signals = [] if not self.validate_device(self._device):
self._normal_signals = []
self._config_signals = []
if self.validate_device(self._device) is False:
self._device = None self._device = None
self.config.device = self._device self.config.device = self._device
return return
@ -116,27 +115,19 @@ class DeviceSignalInputBase(BECWidget):
FilterIO.set_selection(widget=self, selection=[self._device]) FilterIO.set_selection(widget=self, selection=[self._device])
return return
device_info = device._info["signals"] device_info = device._info["signals"]
if Kind.hinted in self.signal_filter:
hinted_signals = [ def _update(kind: Kind):
return [
signal signal
for signal, signal_info in device_info.items() for signal, signal_info in device_info.items()
if (signal_info.get("kind_str", None) == str(Kind.hinted.value)) if kind in self.signal_filter
and (signal_info.get("kind_str", None) == str(kind.name))
] ]
self._hinted_signals = hinted_signals
if Kind.normal in self.signal_filter: self._hinted_signals = _update(Kind.hinted)
normal_signals = [ self._normal_signals = _update(Kind.normal)
signal self._config_signals = _update(Kind.config)
for signal, signal_info in device_info.items()
if (signal_info.get("kind_str", None) == str(Kind.normal.value))
]
self._normal_signals = normal_signals
if Kind.config in self.signal_filter:
config_signals = [
signal
for signal, signal_info in device_info.items()
if (signal_info.get("kind_str", None) == str(Kind.config.value))
]
self._config_signals = config_signals
self._signals = self._hinted_signals + self._normal_signals + self._config_signals self._signals = self._hinted_signals + self._normal_signals + self._config_signals
FilterIO.set_selection(widget=self, selection=self.signals) FilterIO.set_selection(widget=self, selection=self.signals)
@ -279,3 +270,8 @@ class DeviceSignalInputBase(BECWidget):
if signal in self.signals: if signal in self.signals:
return True return True
return False return False
def _process_config_input(self, config: DeviceSignalInputBaseConfig | dict | None):
if config is None:
return DeviceSignalInputBaseConfig(widget_class=self.__class__.__name__)
return DeviceSignalInputBaseConfig.model_validate(config)

View File

@ -7,6 +7,7 @@ from qtpy.QtWidgets import QWidget
from bec_widgets.widgets.control.device_input.base_classes.device_input_base import ( from bec_widgets.widgets.control.device_input.base_classes.device_input_base import (
BECDeviceFilter, BECDeviceFilter,
DeviceInputBase, DeviceInputBase,
DeviceInputConfig,
) )
from .client_mocks import mocked_client from .client_mocks import mocked_client
@ -51,9 +52,13 @@ def test_device_input_base_init_with_config(mocked_client):
"default": "samx", "default": "samx",
} }
widget = DeviceInputWidget(client=mocked_client, config=config) widget = DeviceInputWidget(client=mocked_client, config=config)
assert widget.config.gui_id == "test_gui_id" widget2 = DeviceInputWidget(
assert widget.config.device_filter == ["Positioner"] client=mocked_client, config=DeviceInputConfig.model_validate(config)
assert widget.config.default == "samx" )
for w in [widget, widget2]:
assert w.config.gui_id == "test_gui_id"
assert w.config.device_filter == ["Positioner"]
assert w.config.default == "samx"
def test_device_input_base_set_device_filter(device_input_base): def test_device_input_base_set_device_filter(device_input_base):