bec-widgets 0.72.0__tar.gz → 0.72.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/CHANGELOG.md +10 -8
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/PKG-INFO +1 -1
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/client.py +21 -21
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +1 -1
- bec_widgets-0.72.1/bec_widgets/widgets/__init__.py +1 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/bec_status_box.py +6 -2
- bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar/__init__.py +1 -0
- {bec_widgets-0.72.0/bec_widgets/widgets/spiral_progress_bar → bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar}/ring.py +16 -6
- bec_widgets-0.72.0/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py → bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +10 -8
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/quick_start.md +2 -2
- bec_widgets-0.72.0/docs/user/widgets/spiral_progress_bar.md → bec_widgets-0.72.1/docs/user/widgets/ring_progress_bar.md +9 -9
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/widgets.md +1 -1
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/pyproject.toml +1 -1
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_bec_dock_rpc_e2e.py +5 -5
- bec_widgets-0.72.1/tests/unit_tests/test_bec_status_box.py +121 -0
- bec_widgets-0.72.1/tests/unit_tests/test_ring_progress_bar.py +338 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_rpc_widget_handler.py +1 -1
- bec_widgets-0.72.0/bec_widgets/widgets/__init__.py +0 -5
- bec_widgets-0.72.0/bec_widgets/widgets/spiral_progress_bar/__init__.py +0 -1
- bec_widgets-0.72.0/tests/unit_tests/test_bec_status_box.py +0 -152
- bec_widgets-0.72.0/tests/unit_tests/test_spiral_progress_bar.py +0 -338
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.git_hooks/pre-commit +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitignore +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/issue_templates/bug_report_template.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/issue_templates/documentation_update_template.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/issue_templates/feature_request_template.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/merge_request_templates/default.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab-ci.yml +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.pylintrc +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.readthedocs.yaml +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/LICENSE +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/README.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/assets/bec_widgets_icon.png +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/assets/terminal_icon.png +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/auto_updates.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/client_utils.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/generate_cli.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/rpc_register.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/server.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.ui +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/motor_control_compilations.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/motor_controller.ui +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_connector.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_designer.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_dispatcher.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_table.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/colors.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/container_utils.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/crosshair.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/entry_validator.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/layout_manager.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/plugin_utils.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/rpc_decorator.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/thread_checker.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/ui_loader.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/validator_delegate.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/widget_io.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/yaml_dialog.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/stop_button/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/stop_button/stop_button.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.pyproject +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox_plugin.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/launch_device_combobox.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/register_device_combobox.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_input_base.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.pyproject +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit_plugin.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/launch_device_line_edit.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/register_device_line_edit.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/dock.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/dock_area.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/figure.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_control.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/motor_table.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/motor_table.ui +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.ui +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.ui +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/selection.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/selection.ui +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/text_box/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/text_box/text_box.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/toolbar/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/toolbar/toolbar.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/vscode/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/vscode/vscode.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/website/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/website/website.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/Makefile +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/_static/custom.css +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/_templates/custom-class-template.rst +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/_templates/custom-module-template.rst +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/api_reference/api_reference.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/apps_48dp.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/display_settings_48dp.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_api.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_contribute.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_getting_started.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_user_guide.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/rocket_launch_48dp.svg +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/conf.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/developer.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/getting_started/development.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/getting_started/getting_started.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/widgets/widgets.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/index.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/introduction/introduction.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/make.bat +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/requirements.txt +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/api_reference/api_reference.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/applications/applications.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/customisation.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/BECDockArea.png +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/auto_updates.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/getting_started.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/gui_complex_gui.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/installation.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/user.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/BECFigure.png +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/bec_figure.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/bec_status_box.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/bec_status_box.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/buttons.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/image_plot.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/motor.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/progress_bar.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/scan_control.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/scan_control.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/scatter_2D.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/text_box.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/w1D.gif +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/website.md +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/conftest.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_scan_control_e2e.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/client_mocks.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/conftest.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_connector.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_dispatcher.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_dock.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_figure.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_motor_map.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_client_utils.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_color_validation.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_device.yaml +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_crosshair.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_device_input_base.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_device_input_widgets.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_generate_cli_client.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_motor_control.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_msgs/__init__.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_plot_base.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_plugin_utils.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_rpc_register.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_scan_control.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_scan_control_group_box.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_stop_button.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_text_box_widget.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_vscode_widget.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_waveform1d.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_website_widget.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_widget_io.py +0 -0
- {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_yaml_dialog.py +0 -0
@@ -1,5 +1,15 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## v0.72.1 (2024-06-24)
|
4
|
+
|
5
|
+
### Fix
|
6
|
+
|
7
|
+
* fix: renamed spiral progress bar to ring progress bar; closes #235 ([`e5c0087`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e5c0087c9aed831edbe1c172746325a772a3bafa))
|
8
|
+
|
9
|
+
### Test
|
10
|
+
|
11
|
+
* test: bugfix to prohibit leackage of mock ([`4348ed1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4348ed1bb2182da6bdecaf372d6db85279e60af8))
|
12
|
+
|
3
13
|
## v0.72.0 (2024-06-24)
|
4
14
|
|
5
15
|
### Feature
|
@@ -143,11 +153,3 @@ in their parent process ([`ce37416`](https://gitlab.psi.ch/bec/bec_widgets/-/com
|
|
143
153
|
### Feature
|
144
154
|
|
145
155
|
* feat(rpc): discover widgets automatically ([`ef25f56`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ef25f5638032f931ceb292540ada618508bb2aed))
|
146
|
-
|
147
|
-
## v0.65.2 (2024-06-20)
|
148
|
-
|
149
|
-
### Fix
|
150
|
-
|
151
|
-
* fix(pyqt): webengine must be imported before qcoreapplication ([`cbbd23a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cbbd23aa33095141e4c265719d176c4aa8c25996))
|
152
|
-
|
153
|
-
## v0.65.1 (2024-06-20)
|
@@ -17,8 +17,8 @@ class Widgets(str, enum.Enum):
|
|
17
17
|
BECDock = "BECDock"
|
18
18
|
BECDockArea = "BECDockArea"
|
19
19
|
BECFigure = "BECFigure"
|
20
|
+
RingProgressBar = "RingProgressBar"
|
20
21
|
ScanControl = "ScanControl"
|
21
|
-
SpiralProgressBar = "SpiralProgressBar"
|
22
22
|
TextBox = "TextBox"
|
23
23
|
VSCodeEditor = "VSCodeEditor"
|
24
24
|
WebsiteWidget = "WebsiteWidget"
|
@@ -1824,25 +1824,7 @@ class Ring(RPCBase):
|
|
1824
1824
|
"""
|
1825
1825
|
|
1826
1826
|
|
1827
|
-
class
|
1828
|
-
@property
|
1829
|
-
@rpc_call
|
1830
|
-
def config_dict(self) -> "dict":
|
1831
|
-
"""
|
1832
|
-
Get the configuration of the widget.
|
1833
|
-
|
1834
|
-
Returns:
|
1835
|
-
dict: The configuration of the widget.
|
1836
|
-
"""
|
1837
|
-
|
1838
|
-
@rpc_call
|
1839
|
-
def get_all_rpc(self) -> "dict":
|
1840
|
-
"""
|
1841
|
-
Get all registered RPC objects.
|
1842
|
-
"""
|
1843
|
-
|
1844
|
-
|
1845
|
-
class SpiralProgressBar(RPCBase):
|
1827
|
+
class RingProgressBar(RPCBase):
|
1846
1828
|
@rpc_call
|
1847
1829
|
def get_all_rpc(self) -> "dict":
|
1848
1830
|
"""
|
@@ -1874,7 +1856,7 @@ class SpiralProgressBar(RPCBase):
|
|
1874
1856
|
"""
|
1875
1857
|
|
1876
1858
|
@rpc_call
|
1877
|
-
def update_config(self, config: "
|
1859
|
+
def update_config(self, config: "RingProgressBarConfig | dict"):
|
1878
1860
|
"""
|
1879
1861
|
Update the configuration of the widget.
|
1880
1862
|
|
@@ -2021,6 +2003,24 @@ class SpiralProgressBar(RPCBase):
|
|
2021
2003
|
"""
|
2022
2004
|
|
2023
2005
|
|
2006
|
+
class ScanControl(RPCBase):
|
2007
|
+
@property
|
2008
|
+
@rpc_call
|
2009
|
+
def config_dict(self) -> "dict":
|
2010
|
+
"""
|
2011
|
+
Get the configuration of the widget.
|
2012
|
+
|
2013
|
+
Returns:
|
2014
|
+
dict: The configuration of the widget.
|
2015
|
+
"""
|
2016
|
+
|
2017
|
+
@rpc_call
|
2018
|
+
def get_all_rpc(self) -> "dict":
|
2019
|
+
"""
|
2020
|
+
Get all registered RPC objects.
|
2021
|
+
"""
|
2022
|
+
|
2023
|
+
|
2024
2024
|
class StopButton(RPCBase):
|
2025
2025
|
@property
|
2026
2026
|
@rpc_call
|
@@ -116,7 +116,7 @@ class JupyterConsoleWindow(QWidget): # pragma: no cover:
|
|
116
116
|
self.d2 = self.dock.add_dock(name="dock_2", position="bottom")
|
117
117
|
self.fig2 = self.d2.add_widget("BECFigure", row=0, col=0)
|
118
118
|
self.fig2.plot(x_name="samx", y_name="bpm4i")
|
119
|
-
self.bar = self.d2.add_widget("
|
119
|
+
self.bar = self.d2.add_widget("RingProgressBar", row=0, col=1)
|
120
120
|
self.bar.set_diameter(200)
|
121
121
|
|
122
122
|
self.dock.save_state()
|
@@ -0,0 +1 @@
|
|
1
|
+
|
{bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/bec_status_box.py
RENAMED
@@ -11,7 +11,7 @@ import qdarktheme
|
|
11
11
|
from bec_lib.utils.import_utils import lazy_import_from
|
12
12
|
from pydantic import BaseModel, Field, field_validator
|
13
13
|
from qtpy.QtCore import QObject, QTimer, Signal, Slot
|
14
|
-
from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem
|
14
|
+
from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem
|
15
15
|
|
16
16
|
from bec_widgets.utils.bec_connector import BECConnector, ConnectionConfig
|
17
17
|
from bec_widgets.widgets.bec_status_box.status_item import StatusItem
|
@@ -108,6 +108,7 @@ class BECStatusBox(BECConnector, QTreeWidget):
|
|
108
108
|
service_name: str = "BEC Server",
|
109
109
|
client: BECClient = None,
|
110
110
|
config: BECStatusBoxConfig | dict = None,
|
111
|
+
bec_service_status_mixin: BECServiceStatusMixin = None,
|
111
112
|
gui_id: str = None,
|
112
113
|
):
|
113
114
|
if config is None:
|
@@ -124,7 +125,10 @@ class BECStatusBox(BECConnector, QTreeWidget):
|
|
124
125
|
self.bec_service_info_container = {}
|
125
126
|
self.tree_items = {}
|
126
127
|
self.tree_top_item = None
|
127
|
-
|
128
|
+
|
129
|
+
if not bec_service_status_mixin:
|
130
|
+
bec_service_status_mixin = BECServiceStatusMixin(client=self.client)
|
131
|
+
self.bec_service_status = bec_service_status_mixin
|
128
132
|
|
129
133
|
self.init_ui()
|
130
134
|
self.bec_service_status.services_update.connect(self.update_service_status)
|
@@ -0,0 +1 @@
|
|
1
|
+
from .ring_progress_bar import RingProgressBar
|
@@ -10,12 +10,13 @@ from qtpy import QtGui
|
|
10
10
|
from bec_widgets.utils import BECConnector, ConnectionConfig
|
11
11
|
|
12
12
|
|
13
|
-
class
|
13
|
+
class ProgressbarConnections(BaseModel):
|
14
14
|
slot: Literal["on_scan_progress", "on_device_readback"] = None
|
15
15
|
endpoint: EndpointInfo | str = None
|
16
16
|
model_config: dict = {"validate_assignment": True}
|
17
17
|
|
18
18
|
@field_validator("endpoint")
|
19
|
+
@classmethod
|
19
20
|
def validate_endpoint(cls, v, values):
|
20
21
|
slot = values.data["slot"]
|
21
22
|
v = v.endpoint if isinstance(v, EndpointInfo) else v
|
@@ -36,7 +37,7 @@ class RingConnections(BaseModel):
|
|
36
37
|
return v
|
37
38
|
|
38
39
|
|
39
|
-
class
|
40
|
+
class ProgressbarConfig(ConnectionConfig):
|
40
41
|
value: int | float | None = Field(0, description="Value for the progress bars.")
|
41
42
|
direction: int | None = Field(
|
42
43
|
-1, description="Direction of the progress bars. -1 for clockwise, 1 for counter-clockwise."
|
@@ -62,8 +63,17 @@ class RingConfig(ConnectionConfig):
|
|
62
63
|
update_behaviour: Literal["manual", "auto"] | None = Field(
|
63
64
|
"auto", description="Update behaviour for the progress bars."
|
64
65
|
)
|
65
|
-
connections:
|
66
|
-
default_factory=
|
66
|
+
connections: ProgressbarConnections | None = Field(
|
67
|
+
default_factory=ProgressbarConnections, description="Connections for the progress bars."
|
68
|
+
)
|
69
|
+
|
70
|
+
|
71
|
+
class RingConfig(ProgressbarConfig):
|
72
|
+
index: int | None = Field(0, description="Index of the progress bar. 0 is outer ring.")
|
73
|
+
start_position: int | None = Field(
|
74
|
+
90,
|
75
|
+
description="Start position for the progress bars in degrees. Default is 90 degrees - corespons to "
|
76
|
+
"the top of the ring.",
|
67
77
|
)
|
68
78
|
|
69
79
|
|
@@ -230,7 +240,7 @@ class Ring(BECConnector):
|
|
230
240
|
self.bec_dispatcher.disconnect_slot(
|
231
241
|
self.config.connections.slot, self.config.connections.endpoint
|
232
242
|
)
|
233
|
-
self.config.connections =
|
243
|
+
self.config.connections = ProgressbarConnections(slot=slot, endpoint=endpoint)
|
234
244
|
self.bec_dispatcher.connect_slot(getattr(self, slot), endpoint)
|
235
245
|
|
236
246
|
def reset_connection(self):
|
@@ -240,7 +250,7 @@ class Ring(BECConnector):
|
|
240
250
|
self.bec_dispatcher.disconnect_slot(
|
241
251
|
self.config.connections.slot, self.config.connections.endpoint
|
242
252
|
)
|
243
|
-
self.config.connections =
|
253
|
+
self.config.connections = ProgressbarConnections()
|
244
254
|
|
245
255
|
def on_scan_progress(self, msg, meta):
|
246
256
|
"""
|
@@ -11,10 +11,10 @@ from qtpy.QtCore import QSize, Slot
|
|
11
11
|
from qtpy.QtWidgets import QSizePolicy, QWidget
|
12
12
|
|
13
13
|
from bec_widgets.utils import BECConnector, Colors, ConnectionConfig, EntryValidator
|
14
|
-
from bec_widgets.widgets.
|
14
|
+
from bec_widgets.widgets.ring_progress_bar.ring import Ring, RingConfig
|
15
15
|
|
16
16
|
|
17
|
-
class
|
17
|
+
class RingProgressBarConfig(ConnectionConfig):
|
18
18
|
color_map: Optional[str] = Field(
|
19
19
|
"magma", description="Color scheme for the progress bars.", validate_default=True
|
20
20
|
)
|
@@ -32,6 +32,7 @@ class SpiralProgressBarConfig(ConnectionConfig):
|
|
32
32
|
rings: list[RingConfig] | None = Field([], description="List of ring configurations.")
|
33
33
|
|
34
34
|
@field_validator("num_bars")
|
35
|
+
@classmethod
|
35
36
|
def validate_num_bars(cls, v, values):
|
36
37
|
min_number_of_bars = values.data.get("min_number_of_bars", None)
|
37
38
|
max_number_of_bars = values.data.get("max_number_of_bars", None)
|
@@ -43,6 +44,7 @@ class SpiralProgressBarConfig(ConnectionConfig):
|
|
43
44
|
return v
|
44
45
|
|
45
46
|
@field_validator("rings")
|
47
|
+
@classmethod
|
46
48
|
def validate_rings(cls, v, values):
|
47
49
|
if v is not None and v is not []:
|
48
50
|
num_bars = values.data.get("num_bars", None)
|
@@ -64,7 +66,7 @@ class SpiralProgressBarConfig(ConnectionConfig):
|
|
64
66
|
_validate_colormap = field_validator("color_map")(Colors.validate_color_map)
|
65
67
|
|
66
68
|
|
67
|
-
class
|
69
|
+
class RingProgressBar(BECConnector, QWidget):
|
68
70
|
USER_ACCESS = [
|
69
71
|
"get_all_rpc",
|
70
72
|
"rpc_id",
|
@@ -89,17 +91,17 @@ class SpiralProgressBar(BECConnector, QWidget):
|
|
89
91
|
def __init__(
|
90
92
|
self,
|
91
93
|
parent=None,
|
92
|
-
config:
|
94
|
+
config: RingProgressBarConfig | dict | None = None,
|
93
95
|
client=None,
|
94
96
|
gui_id: str | None = None,
|
95
97
|
num_bars: int | None = None,
|
96
98
|
):
|
97
99
|
if config is None:
|
98
|
-
config =
|
100
|
+
config = RingProgressBarConfig(widget_class=self.__class__.__name__)
|
99
101
|
self.config = config
|
100
102
|
else:
|
101
103
|
if isinstance(config, dict):
|
102
|
-
config =
|
104
|
+
config = RingProgressBarConfig(**config, widget_class=self.__class__.__name__)
|
103
105
|
self.config = config
|
104
106
|
super().__init__(client=client, config=config, gui_id=gui_id)
|
105
107
|
QWidget.__init__(self, parent=None)
|
@@ -129,7 +131,7 @@ class SpiralProgressBar(BECConnector, QWidget):
|
|
129
131
|
def rings(self, value):
|
130
132
|
self._rings = value
|
131
133
|
|
132
|
-
def update_config(self, config:
|
134
|
+
def update_config(self, config: RingProgressBarConfig | dict):
|
133
135
|
"""
|
134
136
|
Update the configuration of the widget.
|
135
137
|
|
@@ -137,7 +139,7 @@ class SpiralProgressBar(BECConnector, QWidget):
|
|
137
139
|
config(SpiralProgressBarConfig|dict): Configuration to update.
|
138
140
|
"""
|
139
141
|
if isinstance(config, dict):
|
140
|
-
config =
|
142
|
+
config = RingProgressBarConfig(**config, widget_class=self.__class__.__name__)
|
141
143
|
self.config = config
|
142
144
|
self.clear_all()
|
143
145
|
|
@@ -97,11 +97,11 @@ Note, we chain commands here which is possible since the `add_dock` and `add_wid
|
|
97
97
|
cam_widget.set_title("Camera Image Eiger")
|
98
98
|
cam_widget.set_vrange(vmin=0, vmax=100)
|
99
99
|
```
|
100
|
-
As a final step, we can now add also a
|
100
|
+
As a final step, we can now add also a RingProgressBar to a new dock, and perform a grid_scan with the motors *samx* and *samy*.
|
101
101
|
As you see in the example below, all docks are arranged below each other. This is the default behavior of the `add_dock` method. However, the docks can be freely arranged by drag and drop as desired by the user. We invite you to explore this by yourself following the example in the video, and build your custom GUI with BEC Widgets.
|
102
102
|
|
103
103
|
```python
|
104
|
-
prog_bar = gui.add_dock(name="prog_dock").add_widget('
|
104
|
+
prog_bar = gui.add_dock(name="prog_dock").add_widget('RingProgressBar')
|
105
105
|
prog_bar.set_line_widths(15)
|
106
106
|
scans.grid_scan(dev.samy, -2, 2, 10, dev.samx, -5, 5, 10, exp_time=0.1, relative=False)
|
107
107
|
```
|
@@ -1,9 +1,9 @@
|
|
1
1
|
(user.widgets.spiral_progress_bar)=
|
2
|
-
# [
|
2
|
+
# [Ring Progress Bar](/api_reference/_autosummary/bec_widgets.cli.client.RingProgressBar)
|
3
3
|
|
4
4
|
**Purpose:**
|
5
5
|
|
6
|
-
The
|
6
|
+
The ring Progress Bar widget is a circular progress bar that can be used to visualize the progress of a task. The
|
7
7
|
widget is designed to be used in applications where the progress of a task is represented as a percentage. The Spiral
|
8
8
|
Progress Bar widget is a part of the BEC Widgets library and can be controlled directly using its API, or hooked up to
|
9
9
|
the progress of a device readback or scan.
|
@@ -15,22 +15,22 @@ the progress of a device readback or scan.
|
|
15
15
|
- multiple progress rings to show different tasks in parallel.
|
16
16
|
|
17
17
|
**Example of Use:**
|
18
|
-

|
19
19
|
|
20
20
|
**Code example:**
|
21
21
|
|
22
|
-
The following code snipped demonstrates how to create a `
|
22
|
+
The following code snipped demonstrates how to create a `RingProgressBar` using BEC Widgets within BEC.
|
23
23
|
```python
|
24
|
-
# adds a new dock with a
|
25
|
-
progress = gui.add_dock().add_widget("
|
24
|
+
# adds a new dock with a ring progress bar
|
25
|
+
progress = gui.add_dock().add_widget("RingProgressBar")
|
26
26
|
# customize the size of the ring
|
27
27
|
progress.set_line_width(20)
|
28
28
|
```
|
29
29
|
|
30
|
-
By default, the
|
30
|
+
By default, the Ring Progress Bar widget will display a single ring. To add more rings, use the add_ring method:
|
31
31
|
|
32
32
|
```python
|
33
|
-
# adds a new dock with a
|
33
|
+
# adds a new dock with a ring progress bar
|
34
34
|
progress.add_ring()
|
35
35
|
```
|
36
36
|
|
@@ -42,7 +42,7 @@ progress.rings[0].set_line_width(20) # set the width of the first ring
|
|
42
42
|
progress.rings[1].set_line_width(10) # set the width of the second ring
|
43
43
|
```
|
44
44
|
|
45
|
-
By default, the `
|
45
|
+
By default, the `RingProgressBar` widget is set with `progress.enable_auto_update(True)`, which will automatically
|
46
46
|
update the bars in the widget. To manually set updates for each progress bar, use the set_update method. Note that
|
47
47
|
manually updating a ring will disable the automatic update for the whole widget:
|
48
48
|
|
@@ -151,13 +151,13 @@ def test_dock_manipulations_e2e(rpc_server_dock):
|
|
151
151
|
assert len(dock.temp_areas) == 0
|
152
152
|
|
153
153
|
|
154
|
-
def
|
154
|
+
def test_ring_bar(rpc_server_dock):
|
155
155
|
dock = BECDockArea(rpc_server_dock)
|
156
156
|
|
157
157
|
d0 = dock.add_dock(name="dock_0")
|
158
158
|
|
159
|
-
bar = d0.add_widget("
|
160
|
-
assert bar.__class__.__name__ == "
|
159
|
+
bar = d0.add_widget("RingProgressBar")
|
160
|
+
assert bar.__class__.__name__ == "RingProgressBar"
|
161
161
|
|
162
162
|
bar.set_number_of_bars(5)
|
163
163
|
bar.set_colors_from_map("viridis")
|
@@ -173,12 +173,12 @@ def test_spiral_bar(rpc_server_dock):
|
|
173
173
|
assert bar_colors == expected_colors
|
174
174
|
|
175
175
|
|
176
|
-
def
|
176
|
+
def test_ring_bar_scan_update(bec_client_lib, rpc_server_dock):
|
177
177
|
dock = BECDockArea(rpc_server_dock)
|
178
178
|
|
179
179
|
d0 = dock.add_dock("dock_0")
|
180
180
|
|
181
|
-
bar = d0.add_widget("
|
181
|
+
bar = d0.add_widget("RingProgressBar")
|
182
182
|
|
183
183
|
client = bec_client_lib
|
184
184
|
dev = client.device_manager.devices
|
@@ -0,0 +1,121 @@
|
|
1
|
+
from unittest import mock
|
2
|
+
|
3
|
+
import pytest
|
4
|
+
from bec_lib.messages import BECStatus, ServiceMetricMessage, StatusMessage
|
5
|
+
|
6
|
+
from bec_widgets.widgets.bec_status_box.bec_status_box import BECServiceInfoContainer, BECStatusBox
|
7
|
+
|
8
|
+
from .client_mocks import mocked_client
|
9
|
+
|
10
|
+
|
11
|
+
@pytest.fixture
|
12
|
+
def service_status_fixture():
|
13
|
+
yield mock.MagicMock()
|
14
|
+
|
15
|
+
|
16
|
+
@pytest.fixture
|
17
|
+
def status_box(qtbot, mocked_client, service_status_fixture):
|
18
|
+
widget = BECStatusBox(
|
19
|
+
client=mocked_client, service_name="test", bec_service_status_mixin=service_status_fixture
|
20
|
+
)
|
21
|
+
qtbot.addWidget(widget)
|
22
|
+
qtbot.waitExposed(widget)
|
23
|
+
yield widget
|
24
|
+
|
25
|
+
|
26
|
+
def test_update_top_item(status_box):
|
27
|
+
assert status_box.children()[0].children()[0].config.status == "IDLE"
|
28
|
+
status_box.update_top_item_status(status="RUNNING")
|
29
|
+
assert status_box.bec_service_info_container["test"].status == "RUNNING"
|
30
|
+
assert status_box.children()[0].children()[0].config.status == "RUNNING"
|
31
|
+
|
32
|
+
|
33
|
+
def test_create_status_widget(status_box):
|
34
|
+
name = "test_service"
|
35
|
+
status = BECStatus.IDLE
|
36
|
+
info = {"test": "test"}
|
37
|
+
metrics = {"metric": "test_metric"}
|
38
|
+
item = status_box._create_status_widget(name, status, info, metrics)
|
39
|
+
assert item.config.service_name == name
|
40
|
+
assert item.config.status == status.name
|
41
|
+
assert item.config.info == info
|
42
|
+
assert item.config.metrics == metrics
|
43
|
+
|
44
|
+
|
45
|
+
def test_bec_service_container(status_box):
|
46
|
+
name = "test_service"
|
47
|
+
status = BECStatus.IDLE
|
48
|
+
info = {"test": "test"}
|
49
|
+
metrics = {"metric": "test_metric"}
|
50
|
+
expected_return = BECServiceInfoContainer(
|
51
|
+
service_name=name, status=status, info=info, metrics=metrics
|
52
|
+
)
|
53
|
+
assert status_box.service_name in status_box.bec_service_info_container
|
54
|
+
assert len(status_box.bec_service_info_container) == 1
|
55
|
+
status_box._update_bec_service_container(name, status, info, metrics)
|
56
|
+
assert len(status_box.bec_service_info_container) == 2
|
57
|
+
assert status_box.bec_service_info_container[name] == expected_return
|
58
|
+
|
59
|
+
|
60
|
+
def test_add_tree_item(status_box):
|
61
|
+
name = "test_service"
|
62
|
+
status = BECStatus.IDLE
|
63
|
+
info = {"test": "test"}
|
64
|
+
metrics = {"metric": "test_metric"}
|
65
|
+
assert len(status_box.children()[0].children()) == 1
|
66
|
+
status_box.add_tree_item(name, status, info, metrics)
|
67
|
+
assert len(status_box.children()[0].children()) == 2
|
68
|
+
assert name in status_box.tree_items
|
69
|
+
|
70
|
+
|
71
|
+
def test_update_service_status(status_box):
|
72
|
+
"""Also checks check redundant tree items"""
|
73
|
+
name = "test_service"
|
74
|
+
status = BECStatus.IDLE
|
75
|
+
info = {"test": "test"}
|
76
|
+
metrics = {"metric": "test_metric"}
|
77
|
+
status_box.add_tree_item(name, status, info, {})
|
78
|
+
not_connected_name = "invalid_service"
|
79
|
+
status_box.add_tree_item(not_connected_name, status, info, metrics)
|
80
|
+
|
81
|
+
services_status = {name: StatusMessage(name=name, status=status, info=info)}
|
82
|
+
services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
|
83
|
+
|
84
|
+
with mock.patch.object(status_box, "update_core_services", return_value=services_status):
|
85
|
+
assert not_connected_name in status_box.tree_items
|
86
|
+
status_box.update_service_status(services_status, services_metrics)
|
87
|
+
assert status_box.tree_items[name][1].config.metrics == metrics
|
88
|
+
assert not_connected_name not in status_box.tree_items
|
89
|
+
|
90
|
+
|
91
|
+
def test_update_core_services(status_box):
|
92
|
+
status_box.CORE_SERVICES = ["test_service"]
|
93
|
+
name = "test_service"
|
94
|
+
status = BECStatus.RUNNING
|
95
|
+
info = {"test": "test"}
|
96
|
+
metrics = {"metric": "test_metric"}
|
97
|
+
services_status = {name: StatusMessage(name=name, status=status, info=info)}
|
98
|
+
services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
|
99
|
+
|
100
|
+
status_box.update_core_services(services_status, services_metrics)
|
101
|
+
assert status_box.children()[0].children()[0].config.status == "RUNNING"
|
102
|
+
assert status_box.tree_items[name][1].config.metrics == metrics
|
103
|
+
|
104
|
+
status = BECStatus.IDLE
|
105
|
+
services_status = {name: StatusMessage(name=name, status=status, info=info)}
|
106
|
+
services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
|
107
|
+
status_box.update_core_services(services_status, services_metrics)
|
108
|
+
assert status_box.children()[0].children()[0].config.status == "ERROR"
|
109
|
+
assert status_box.tree_items[name][1].config.metrics == metrics
|
110
|
+
|
111
|
+
|
112
|
+
def test_double_click_item(status_box):
|
113
|
+
name = "test_service"
|
114
|
+
status = BECStatus.IDLE
|
115
|
+
info = {"test": "test"}
|
116
|
+
metrics = {"MyData": "This should be shown nicely"}
|
117
|
+
status_box.add_tree_item(name, status, info, metrics)
|
118
|
+
item, status_item = status_box.tree_items[name]
|
119
|
+
with mock.patch.object(status_item, "show_popup") as mock_show_popup:
|
120
|
+
status_box.itemDoubleClicked.emit(item, 0)
|
121
|
+
assert mock_show_popup.call_count == 1
|