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.
Files changed (216) hide show
  1. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/CHANGELOG.md +10 -8
  2. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/PKG-INFO +1 -1
  3. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/client.py +21 -21
  4. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +1 -1
  5. bec_widgets-0.72.1/bec_widgets/widgets/__init__.py +1 -0
  6. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/bec_status_box.py +6 -2
  7. bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar/__init__.py +1 -0
  8. {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
  9. 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
  10. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/quick_start.md +2 -2
  11. 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
  12. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/widgets.md +1 -1
  13. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/pyproject.toml +1 -1
  14. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_bec_dock_rpc_e2e.py +5 -5
  15. bec_widgets-0.72.1/tests/unit_tests/test_bec_status_box.py +121 -0
  16. bec_widgets-0.72.1/tests/unit_tests/test_ring_progress_bar.py +338 -0
  17. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_rpc_widget_handler.py +1 -1
  18. bec_widgets-0.72.0/bec_widgets/widgets/__init__.py +0 -5
  19. bec_widgets-0.72.0/bec_widgets/widgets/spiral_progress_bar/__init__.py +0 -1
  20. bec_widgets-0.72.0/tests/unit_tests/test_bec_status_box.py +0 -152
  21. bec_widgets-0.72.0/tests/unit_tests/test_spiral_progress_bar.py +0 -338
  22. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.git_hooks/pre-commit +0 -0
  23. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitignore +0 -0
  24. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/issue_templates/bug_report_template.md +0 -0
  25. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  26. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/issue_templates/feature_request_template.md +0 -0
  27. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab/merge_request_templates/default.md +0 -0
  28. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.gitlab-ci.yml +0 -0
  29. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.pylintrc +0 -0
  30. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/.readthedocs.yaml +0 -0
  31. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/LICENSE +0 -0
  32. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/README.md +0 -0
  33. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/__init__.py +0 -0
  34. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/assets/bec_widgets_icon.png +0 -0
  35. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/assets/terminal_icon.png +0 -0
  36. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/__init__.py +0 -0
  37. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/auto_updates.py +0 -0
  38. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/client_utils.py +0 -0
  39. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/generate_cli.py +0 -0
  40. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/rpc_register.py +0 -0
  41. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  42. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/cli/server.py +0 -0
  43. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/__init__.py +0 -0
  44. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  45. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.ui +0 -0
  46. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/__init__.py +0 -0
  47. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/motor_control_compilations.py +0 -0
  48. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/motor_controller.ui +0 -0
  49. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  50. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  51. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  52. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  53. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  54. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  55. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  56. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/__init__.py +0 -0
  57. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_connector.py +0 -0
  58. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_designer.py +0 -0
  59. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_dispatcher.py +0 -0
  60. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/bec_table.py +0 -0
  61. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/colors.py +0 -0
  62. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/container_utils.py +0 -0
  63. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/crosshair.py +0 -0
  64. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/entry_validator.py +0 -0
  65. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/layout_manager.py +0 -0
  66. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/plugin_utils.py +0 -0
  67. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/rpc_decorator.py +0 -0
  68. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/thread_checker.py +0 -0
  69. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/ui_loader.py +0 -0
  70. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/validator_delegate.py +0 -0
  71. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/widget_io.py +0 -0
  72. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/utils/yaml_dialog.py +0 -0
  73. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  74. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  75. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/__init__.py +0 -0
  76. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/stop_button/__init__.py +0 -0
  77. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/stop_button/stop_button.py +0 -0
  78. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/__init__.py +0 -0
  79. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/__init__.py +0 -0
  80. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.py +0 -0
  81. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.pyproject +0 -0
  82. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox_plugin.py +0 -0
  83. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/launch_device_combobox.py +0 -0
  84. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/register_device_combobox.py +0 -0
  85. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_input_base.py +0 -0
  86. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/__init__.py +0 -0
  87. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.py +0 -0
  88. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.pyproject +0 -0
  89. {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
  90. {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
  91. {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
  92. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/__init__.py +0 -0
  93. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/dock.py +0 -0
  94. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/dock_area.py +0 -0
  95. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/__init__.py +0 -0
  96. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/figure.py +0 -0
  97. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  98. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  99. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  100. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  101. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  102. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  103. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  104. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  105. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  106. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  107. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  108. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  109. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  110. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/__init__.py +0 -0
  111. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_control.py +0 -0
  112. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/__init__.py +0 -0
  113. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/motor_table.py +0 -0
  114. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/motor_table.ui +0 -0
  115. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/__init__.py +0 -0
  116. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py +0 -0
  117. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.ui +0 -0
  118. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/__init__.py +0 -0
  119. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.py +0 -0
  120. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.ui +0 -0
  121. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/__init__.py +0 -0
  122. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/selection.py +0 -0
  123. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/selection.ui +0 -0
  124. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  125. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  126. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  127. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/text_box/__init__.py +0 -0
  128. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/text_box/text_box.py +0 -0
  129. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/toolbar/__init__.py +0 -0
  130. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/toolbar/toolbar.py +0 -0
  131. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/vscode/__init__.py +0 -0
  132. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/vscode/vscode.py +0 -0
  133. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/website/__init__.py +0 -0
  134. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/bec_widgets/widgets/website/website.py +0 -0
  135. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/Makefile +0 -0
  136. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/_static/custom.css +0 -0
  137. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/_templates/custom-class-template.rst +0 -0
  138. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/_templates/custom-module-template.rst +0 -0
  139. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/api_reference/api_reference.md +0 -0
  140. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/apps_48dp.svg +0 -0
  141. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/display_settings_48dp.svg +0 -0
  142. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_api.svg +0 -0
  143. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_contribute.svg +0 -0
  144. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_getting_started.svg +0 -0
  145. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/index_user_guide.svg +0 -0
  146. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/assets/rocket_launch_48dp.svg +0 -0
  147. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/conf.py +0 -0
  148. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/developer.md +0 -0
  149. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/getting_started/development.md +0 -0
  150. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/getting_started/getting_started.md +0 -0
  151. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/developer/widgets/widgets.md +0 -0
  152. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/index.md +0 -0
  153. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/introduction/introduction.md +0 -0
  154. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/make.bat +0 -0
  155. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/requirements.txt +0 -0
  156. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/api_reference/api_reference.md +0 -0
  157. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/applications/applications.md +0 -0
  158. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/customisation.md +0 -0
  159. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/BECDockArea.png +0 -0
  160. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/auto_updates.md +0 -0
  161. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/getting_started.md +0 -0
  162. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/gui_complex_gui.gif +0 -0
  163. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/getting_started/installation.md +0 -0
  164. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/user.md +0 -0
  165. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/BECFigure.png +0 -0
  166. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/bec_figure.md +0 -0
  167. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/bec_status_box.gif +0 -0
  168. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/bec_status_box.md +0 -0
  169. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/buttons.md +0 -0
  170. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/image_plot.gif +0 -0
  171. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/motor.gif +0 -0
  172. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/progress_bar.gif +0 -0
  173. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/scan_control.gif +0 -0
  174. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/scan_control.md +0 -0
  175. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/scatter_2D.gif +0 -0
  176. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/text_box.md +0 -0
  177. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/w1D.gif +0 -0
  178. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/docs/user/widgets/website.md +0 -0
  179. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/__init__.py +0 -0
  180. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/__init__.py +0 -0
  181. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/conftest.py +0 -0
  182. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
  183. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
  184. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/end-2-end/test_scan_control_e2e.py +0 -0
  185. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/__init__.py +0 -0
  186. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/client_mocks.py +0 -0
  187. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/conftest.py +0 -0
  188. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_connector.py +0 -0
  189. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_dispatcher.py +0 -0
  190. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_dock.py +0 -0
  191. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_figure.py +0 -0
  192. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_motor_map.py +0 -0
  193. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_client_utils.py +0 -0
  194. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_color_validation.py +0 -0
  195. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_device.yaml +0 -0
  196. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
  197. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
  198. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_crosshair.py +0 -0
  199. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_device_input_base.py +0 -0
  200. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_device_input_widgets.py +0 -0
  201. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_generate_cli_client.py +0 -0
  202. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_motor_control.py +0 -0
  203. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_msgs/__init__.py +0 -0
  204. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
  205. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_plot_base.py +0 -0
  206. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_plugin_utils.py +0 -0
  207. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_rpc_register.py +0 -0
  208. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_scan_control.py +0 -0
  209. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_scan_control_group_box.py +0 -0
  210. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_stop_button.py +0 -0
  211. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_text_box_widget.py +0 -0
  212. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_vscode_widget.py +0 -0
  213. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_waveform1d.py +0 -0
  214. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_website_widget.py +0 -0
  215. {bec_widgets-0.72.0 → bec_widgets-0.72.1}/tests/unit_tests/test_widget_io.py +0 -0
  216. {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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.72.0
3
+ Version: 0.72.1
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -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 ScanControl(RPCBase):
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: "SpiralProgressBarConfig | dict"):
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("SpiralProgressBar", row=0, col=1)
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()
@@ -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, QVBoxLayout, QWidget
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
- self.bec_service_status = BECServiceStatusMixin(client=self.client)
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 RingConnections(BaseModel):
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 RingConfig(ConnectionConfig):
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: RingConnections | None = Field(
66
- default_factory=RingConnections, description="Connections for the progress bars."
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 = RingConnections(slot=slot, endpoint=endpoint)
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 = RingConnections()
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.spiral_progress_bar.ring import Ring, RingConfig
14
+ from bec_widgets.widgets.ring_progress_bar.ring import Ring, RingConfig
15
15
 
16
16
 
17
- class SpiralProgressBarConfig(ConnectionConfig):
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 SpiralProgressBar(BECConnector, QWidget):
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: SpiralProgressBarConfig | dict | None = None,
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 = SpiralProgressBarConfig(widget_class=self.__class__.__name__)
100
+ config = RingProgressBarConfig(widget_class=self.__class__.__name__)
99
101
  self.config = config
100
102
  else:
101
103
  if isinstance(config, dict):
102
- config = SpiralProgressBarConfig(**config, widget_class=self.__class__.__name__)
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: SpiralProgressBarConfig | dict):
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 = SpiralProgressBarConfig(**config, widget_class=self.__class__.__name__)
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 SpiralProgressBar to a new dock, and perform a grid_scan with the motors *samx* and *samy*.
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('SpiralProgressBar')
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
- # [Spiral Progress Bar](/api_reference/_autosummary/bec_widgets.cli.client.SpiralProgressBar)
2
+ # [Ring Progress Bar](/api_reference/_autosummary/bec_widgets.cli.client.RingProgressBar)
3
3
 
4
4
  **Purpose:**
5
5
 
6
- The Spiral Progress Bar widget is a circular progress bar that can be used to visualize the progress of a task. 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
- ![SpiralProgressBar](./progress_bar.gif)
18
+ ![RingProgressBar](./progress_bar.gif)
19
19
 
20
20
  **Code example:**
21
21
 
22
- The following code snipped demonstrates how to create a `SpiralProgressBar` using BEC Widgets within BEC.
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 spiral progress bar
25
- progress = gui.add_dock().add_widget("SpiralProgressBar")
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 Spiral Progress Bar widget will display a single ring. To add more rings, use the add_ring method:
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 spiral progress bar
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 `SpiralProgressBar` widget is set with `progress.enable_auto_update(True)`, which will automatically
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
 
@@ -9,7 +9,7 @@ hidden: false
9
9
  ---
10
10
 
11
11
  bec_figure/
12
- spiral_progress_bar/
12
+ ring_progress_bar/
13
13
  website/
14
14
  buttons/
15
15
  text_box/
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.72.0"
7
+ version = "0.72.1"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -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 test_spiral_bar(rpc_server_dock):
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("SpiralProgressBar")
160
- assert bar.__class__.__name__ == "SpiralProgressBar"
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 test_spiral_bar_scan_update(bec_client_lib, rpc_server_dock):
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("SpiralProgressBar")
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