From 67032eaa956621e3306776c613ecc11624e76f7d Mon Sep 17 00:00:00 2001 From: appel_c Date: Sat, 22 Mar 2025 16:42:19 +0100 Subject: [PATCH] refactor: cleanup, fix tests and _top_level dict/windows --- bec_widgets/cli/client_utils.py | 6 --- .../containers/main_window/main_window.py | 41 ++++++++++--------- tests/end-2-end/test_bec_dock_rpc_e2e.py | 9 +++- tests/unit_tests/test_device_input_base.py | 4 +- tests/unit_tests/test_device_input_widgets.py | 4 +- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/bec_widgets/cli/client_utils.py b/bec_widgets/cli/client_utils.py index eec25511..8afe967f 100644 --- a/bec_widgets/cli/client_utils.py +++ b/bec_widgets/cli/client_utils.py @@ -280,13 +280,11 @@ class BECGuiClient(RPCBase): widget = rpc_client._run_rpc( "new_dock_area", name, geometry ) # pylint: disable=protected-access - self._top_level[widget.widget_name] = widget return widget rpc_client = RPCBase(gui_id=f"{self._gui_id}:window", parent=self) widget = rpc_client._run_rpc( "new_dock_area", name, geometry ) # pylint: disable=protected-access - self._top_level[widget.widget_name] = widget return widget def delete(self, name: str) -> None: @@ -399,10 +397,6 @@ class BECGuiClient(RPCBase): def _start(self, wait: bool = False) -> None: self._killed = False - # Clear the registry state - self._registry_state.clear() - # Clear top level - self._top_level.clear() self._client.connector.register( MessageEndpoints.gui_registry_state(self._gui_id), cb=self._handle_registry_update ) diff --git a/bec_widgets/widgets/containers/main_window/main_window.py b/bec_widgets/widgets/containers/main_window/main_window.py index 76b689b4..1a821445 100644 --- a/bec_widgets/widgets/containers/main_window/main_window.py +++ b/bec_widgets/widgets/containers/main_window/main_window.py @@ -1,7 +1,7 @@ from bec_lib.logger import bec_logger from qtpy.QtWidgets import QApplication, QMainWindow -from bec_widgets.cli.rpc.rpc_register import RPCRegister +from bec_widgets.cli.rpc.rpc_register import RPCRegister, rpc_register_broadcast from bec_widgets.utils.bec_widget import BECWidget from bec_widgets.utils.container_utils import WidgetContainerUtils from bec_widgets.widgets.containers.dock.dock_area import BECDockArea @@ -50,25 +50,26 @@ class BECMainWindow(BECWidget, QMainWindow): BECDockArea: The newly created dock area. """ rpc_register = RPCRegister() - existing_dock_areas = rpc_register.get_names_of_rpc_by_class_type(BECDockArea) - if name is not None: - if name in existing_dock_areas: - raise ValueError( - f"Name {name} must be unique for dock areas, but already exists: {existing_dock_areas}." - ) - else: - name = "dock_area" - name = WidgetContainerUtils.generate_unique_name(name, existing_dock_areas) - dock_area = BECDockArea(name=name) - dock_area.resize(dock_area.minimumSizeHint()) - # TODO Should we simply use the specified name as title here? - dock_area.window().setWindowTitle(f"BEC - {name}") - logger.info(f"Created new dock area: {name}") - logger.info(f"Existing dock areas: {geometry}") - if geometry is not None: - dock_area.setGeometry(*geometry) - dock_area.show() - return dock_area + with rpc_register_broadcast(rpc_register): + existing_dock_areas = rpc_register.get_names_of_rpc_by_class_type(BECDockArea) + if name is not None: + if name in existing_dock_areas: + raise ValueError( + f"Name {name} must be unique for dock areas, but already exists: {existing_dock_areas}." + ) + else: + name = "dock_area" + name = WidgetContainerUtils.generate_unique_name(name, existing_dock_areas) + dock_area = BECDockArea(name=name) + dock_area.resize(dock_area.minimumSizeHint()) + # TODO Should we simply use the specified name as title here? + dock_area.window().setWindowTitle(f"BEC - {name}") + logger.info(f"Created new dock area: {name}") + logger.info(f"Existing dock areas: {geometry}") + if geometry is not None: + dock_area.setGeometry(*geometry) + dock_area.show() + return dock_area def cleanup(self): super().close() diff --git a/tests/end-2-end/test_bec_dock_rpc_e2e.py b/tests/end-2-end/test_bec_dock_rpc_e2e.py index e5e220a7..0d2d5be6 100644 --- a/tests/end-2-end/test_bec_dock_rpc_e2e.py +++ b/tests/end-2-end/test_bec_dock_rpc_e2e.py @@ -177,13 +177,18 @@ def test_rpc_gui_obj(connected_client_gui_obj, qtbot): assert all(windows["visible"] for windows in gui_info.values()) assert gui._gui_is_alive() - gui.close() + gui.kill_server() assert not gui._gui_is_alive() - gui._start(wait=True) + gui.start(wait=True) assert gui._gui_is_alive() # calling start multiple times should not change anything gui.start(wait=True) gui.start(wait=True) + + def wait_for_gui_started(): + return "bec" in gui.windows + + qtbot.waitUntil(wait_for_gui_started, timeout=3000) # gui.windows should have bec with gui_id 'bec' assert len(gui.windows) == 1 assert gui.windows["bec"]._gui_id == mw._gui_id diff --git a/tests/unit_tests/test_device_input_base.py b/tests/unit_tests/test_device_input_base.py index c9f19c8c..b7c806a5 100644 --- a/tests/unit_tests/test_device_input_base.py +++ b/tests/unit_tests/test_device_input_base.py @@ -53,14 +53,14 @@ def test_device_input_base_init_with_config(mocked_client): } widget = DeviceInputWidget(client=mocked_client, config=config) assert widget.config.gui_id == "test_gui_id" - assert widget.config.device_filter == [BECDeviceFilter.POSITIONER] + assert widget.config.device_filter == ["Positioner"] assert widget.config.default == "samx" def test_device_input_base_set_device_filter(device_input_base): """Test device filter setter.""" device_input_base.set_device_filter(BECDeviceFilter.POSITIONER) - assert device_input_base.config.device_filter == [BECDeviceFilter.POSITIONER] + assert device_input_base.config.device_filter == ["Positioner"] def test_device_input_base_set_device_filter_error(device_input_base): diff --git a/tests/unit_tests/test_device_input_widgets.py b/tests/unit_tests/test_device_input_widgets.py index 1d6f03fa..f394a297 100644 --- a/tests/unit_tests/test_device_input_widgets.py +++ b/tests/unit_tests/test_device_input_widgets.py @@ -60,7 +60,7 @@ def test_device_input_combobox_init(device_input_combobox): def test_device_input_combobox_init_with_kwargs(device_input_combobox_with_kwargs): assert device_input_combobox_with_kwargs.config.gui_id == "test_gui_id" - assert device_input_combobox_with_kwargs.config.device_filter == [BECDeviceFilter.POSITIONER] + assert device_input_combobox_with_kwargs.config.device_filter == ["Positioner"] assert device_input_combobox_with_kwargs.config.default == "samx" assert device_input_combobox_with_kwargs.config.arg_name == "test_arg_name" @@ -132,7 +132,7 @@ def test_device_input_line_edit_init(device_input_line_edit): def test_device_input_line_edit_init_with_kwargs(device_input_line_edit_with_kwargs): assert device_input_line_edit_with_kwargs.config.gui_id == "test_gui_id" - assert device_input_line_edit_with_kwargs.config.device_filter == [BECDeviceFilter.POSITIONER] + assert device_input_line_edit_with_kwargs.config.device_filter == ["Positioner"] assert device_input_line_edit_with_kwargs.config.default == "samx" assert device_input_line_edit_with_kwargs.config.arg_name == "test_arg_name"