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:
@ -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 = {
|
||||||
|
@ -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)
|
||||||
|
@ -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):
|
||||||
|
Reference in New Issue
Block a user