bec-widgets 0.64.0__tar.gz → 0.64.2__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 (175) hide show
  1. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/CHANGELOG.md +20 -20
  2. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/PKG-INFO +1 -1
  3. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/client_utils.py +8 -1
  4. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/generate_cli.py +2 -48
  5. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/server.py +2 -2
  6. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +1 -1
  7. bec_widgets-0.64.2/bec_widgets/utils/plugin_utils.py +88 -0
  8. bec_widgets-0.64.2/bec_widgets/widgets/__init__.py +5 -0
  9. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/dock/dock.py +1 -1
  10. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/customisation.md +2 -2
  11. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/buttons.md +1 -1
  12. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/pyproject.toml +1 -1
  13. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/end-2-end/conftest.py +2 -1
  14. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_bec_dock.py +1 -1
  15. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_bec_figure.py +1 -1
  16. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_generate_cli_client.py +0 -14
  17. bec_widgets-0.64.2/tests/unit_tests/test_plugin_utils.py +14 -0
  18. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_scan_control.py +1 -1
  19. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_spiral_progress_bar.py +1 -1
  20. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_stop_button.py +1 -1
  21. bec_widgets-0.64.0/bec_widgets/utils/plugin_utils.py +0 -40
  22. bec_widgets-0.64.0/bec_widgets/widgets/__init__.py +0 -5
  23. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.git_hooks/pre-commit +0 -0
  24. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.gitignore +0 -0
  25. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.gitlab/issue_templates/bug_report_template.md +0 -0
  26. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  27. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.gitlab/issue_templates/feature_request_template.md +0 -0
  28. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.gitlab/merge_request_templates/default.md +0 -0
  29. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.gitlab-ci.yml +0 -0
  30. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.pylintrc +0 -0
  31. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/.readthedocs.yaml +0 -0
  32. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/LICENSE +0 -0
  33. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/README.md +0 -0
  34. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/__init__.py +0 -0
  35. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/assets/bec_widgets_icon.png +0 -0
  36. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/assets/terminal_icon.png +0 -0
  37. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/__init__.py +0 -0
  38. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/auto_updates.py +0 -0
  39. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/client.py +0 -0
  40. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/rpc_register.py +0 -0
  41. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  42. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/__init__.py +0 -0
  43. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  44. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/jupyter_console/jupyter_console_window.ui +0 -0
  45. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/motor_movement/__init__.py +0 -0
  46. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/motor_movement/motor_control_compilations.py +0 -0
  47. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/examples/motor_movement/motor_controller.ui +0 -0
  48. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/__init__.py +0 -0
  49. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/bec_connector.py +0 -0
  50. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/bec_dispatcher.py +0 -0
  51. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/bec_table.py +0 -0
  52. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/colors.py +0 -0
  53. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/container_utils.py +0 -0
  54. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/crosshair.py +0 -0
  55. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/entry_validator.py +0 -0
  56. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/layout_manager.py +0 -0
  57. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/rpc_decorator.py +0 -0
  58. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/thread_checker.py +0 -0
  59. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/ui_loader.py +0 -0
  60. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/validator_delegate.py +0 -0
  61. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/widget_io.py +0 -0
  62. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/utils/yaml_dialog.py +0 -0
  63. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/buttons/__init__.py +0 -0
  64. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/buttons/stop_button/__init__.py +0 -0
  65. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/buttons/stop_button/stop_button.py +0 -0
  66. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/dock/__init__.py +0 -0
  67. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/dock/dock_area.py +0 -0
  68. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/__init__.py +0 -0
  69. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/figure.py +0 -0
  70. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  71. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  72. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  73. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  74. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  75. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  76. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  77. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  78. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  79. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  80. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  81. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  82. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  83. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/__init__.py +0 -0
  84. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/motor_control.py +0 -0
  85. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/motor_table/__init__.py +0 -0
  86. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/motor_table/motor_table.py +0 -0
  87. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/motor_table/motor_table.ui +0 -0
  88. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/movement_absolute/__init__.py +0 -0
  89. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py +0 -0
  90. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.ui +0 -0
  91. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/movement_relative/__init__.py +0 -0
  92. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.py +0 -0
  93. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.ui +0 -0
  94. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/selection/__init__.py +0 -0
  95. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/selection/selection.py +0 -0
  96. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/motor_control/selection/selection.ui +0 -0
  97. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  98. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  99. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/spiral_progress_bar/__init__.py +0 -0
  100. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/spiral_progress_bar/ring.py +0 -0
  101. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py +0 -0
  102. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/text_box/__init__.py +0 -0
  103. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/text_box/text_box.py +0 -0
  104. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/toolbar/__init__.py +0 -0
  105. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/toolbar/toolbar.py +0 -0
  106. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/website/__init__.py +0 -0
  107. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/bec_widgets/widgets/website/website.py +0 -0
  108. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/Makefile +0 -0
  109. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/_static/custom.css +0 -0
  110. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/_templates/custom-class-template.rst +0 -0
  111. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/_templates/custom-module-template.rst +0 -0
  112. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/api_reference/api_reference.md +0 -0
  113. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/apps_48dp.svg +0 -0
  114. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/display_settings_48dp.svg +0 -0
  115. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/index_api.svg +0 -0
  116. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/index_contribute.svg +0 -0
  117. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/index_getting_started.svg +0 -0
  118. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/index_user_guide.svg +0 -0
  119. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/assets/rocket_launch_48dp.svg +0 -0
  120. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/conf.py +0 -0
  121. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/developer/developer.md +0 -0
  122. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/developer/getting_started/development.md +0 -0
  123. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/developer/getting_started/getting_started.md +0 -0
  124. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/developer/widgets/widgets.md +0 -0
  125. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/index.md +0 -0
  126. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/introduction/introduction.md +0 -0
  127. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/make.bat +0 -0
  128. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/requirements.txt +0 -0
  129. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/api_reference/api_reference.md +0 -0
  130. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/applications/applications.md +0 -0
  131. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/getting_started/BECDockArea.png +0 -0
  132. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/getting_started/auto_updates.md +0 -0
  133. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/getting_started/getting_started.md +0 -0
  134. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/getting_started/gui_complex_gui.gif +0 -0
  135. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/getting_started/installation.md +0 -0
  136. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/getting_started/quick_start.md +0 -0
  137. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/user.md +0 -0
  138. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/BECFigure.png +0 -0
  139. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/bec_figure.md +0 -0
  140. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/image_plot.gif +0 -0
  141. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/motor.gif +0 -0
  142. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/progress_bar.gif +0 -0
  143. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/scatter_2D.gif +0 -0
  144. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/spiral_progress_bar.md +0 -0
  145. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/text_box.md +0 -0
  146. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/w1D.gif +0 -0
  147. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/website.md +0 -0
  148. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/docs/user/widgets/widgets.md +0 -0
  149. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/__init__.py +0 -0
  150. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/end-2-end/__init__.py +0 -0
  151. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/end-2-end/test_bec_dock_rpc_e2e.py +0 -0
  152. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
  153. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
  154. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/__init__.py +0 -0
  155. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/client_mocks.py +0 -0
  156. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/conftest.py +0 -0
  157. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_bec_connector.py +0 -0
  158. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_bec_dispatcher.py +0 -0
  159. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_bec_motor_map.py +0 -0
  160. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_client_utils.py +0 -0
  161. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_color_validation.py +0 -0
  162. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_configs/config_device.yaml +0 -0
  163. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
  164. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
  165. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_crosshair.py +0 -0
  166. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_motor_control.py +0 -0
  167. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_msgs/__init__.py +0 -0
  168. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
  169. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_plot_base.py +0 -0
  170. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_rpc_register.py +0 -0
  171. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_text_box_widget.py +0 -0
  172. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_waveform1d.py +0 -0
  173. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_website_widget.py +0 -0
  174. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_widget_io.py +0 -0
  175. {bec_widgets-0.64.0 → bec_widgets-0.64.2}/tests/unit_tests/test_yaml_dialog.py +0 -0
@@ -1,5 +1,25 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.64.2 (2024-06-19)
4
+
5
+ ### Fix
6
+
7
+ * fix(client_utils): added close rpc command to shutdown of gui from bec_ipython_client ([`e5a7d47`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e5a7d47b21cbf066f740f1d11d7c9ea7c70f3080))
8
+
9
+ ## v0.64.1 (2024-06-19)
10
+
11
+ ### Fix
12
+
13
+ * fix(widgets): removed widget module import of sub widgets ([`216511b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/216511b951ff0e15b6d7c70133095f3ac45c23f4))
14
+
15
+ ### Refactor
16
+
17
+ * refactor(utils): moved get_rpc_widgets to plugin_utils ([`6dabbf8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6dabbf874fbbdde89c34a7885bf95aa9c895a28b))
18
+
19
+ ### Test
20
+
21
+ * test: moved rpc_classes test ([`b3575eb`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b3575eb06852b456cde915dfda281a3e778e3aeb))
22
+
3
23
  ## v0.64.0 (2024-06-19)
4
24
 
5
25
  ### Ci
@@ -141,28 +161,8 @@ This reverts commit abc6caa2d0b6141dfbe1f3d025f78ae14deddcb3 ([`fe04dd8`](https:
141
161
 
142
162
  ## v0.59.0 (2024-06-07)
143
163
 
144
- ### Build
145
-
146
- * build: added webengine dependency ([`d56c549`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d56c5493cd28f379d04a79d90b01c73b0760da1b))
147
-
148
164
  ### Ci
149
165
 
150
166
  * ci: merged additional tests to parallel matrix job ([`178fe4d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/178fe4d2da3a959f7cd90e7ea0f47314dc1ef4ed))
151
167
 
152
168
  * ci: added webengine dependencies ([`2d79ef8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2d79ef8fe5e52c61f4a78782770377cd6b41958b))
153
-
154
- ### Documentation
155
-
156
- * docs: added website docs ([`cf6e5a4`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cf6e5a40fc8320e9898a446a5bf14b77e94ef013))
157
-
158
- ### Feature
159
-
160
- * feat(widget): added simple website widget with rpc ([`64abd67`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/64abd67b9b416bff9c89880b248d6e8639aa1e70))
161
-
162
- ## v0.58.1 (2024-06-07)
163
-
164
- ### Fix
165
-
166
- * fix(dock): new dock can be detached upon creation ([`02a2608`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/02a26086c4540127a11c235cba30afc4fd712007))
167
-
168
- ## v0.58.0 (2024-06-07)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.64.0
3
+ Version: 0.64.2
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
@@ -173,8 +173,15 @@ class BECGuiClientMixin:
173
173
 
174
174
  def close(self) -> None:
175
175
  """
176
- Close the figure.
176
+ Close the gui window.
177
177
  """
178
+ if self._process is None:
179
+ return
180
+
181
+ self._run_rpc("close", (), wait_for_rpc_response=False)
182
+ while self.gui_is_alive():
183
+ time.sleep(0.2)
184
+
178
185
  self._client.shutdown()
179
186
  if self._process:
180
187
  self._process.terminate()
@@ -2,7 +2,6 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  import argparse
5
- import importlib
6
5
  import inspect
7
6
  import os
8
7
  import sys
@@ -10,9 +9,8 @@ from typing import Literal
10
9
 
11
10
  import black
12
11
  import isort
13
- from qtpy.QtWidgets import QGraphicsWidget, QWidget
14
12
 
15
- from bec_widgets.utils import BECConnector
13
+ from bec_widgets.utils.plugin_utils import get_rpc_classes
16
14
 
17
15
  if sys.version_info >= (3, 11):
18
16
  from typing import get_overloads
@@ -138,50 +136,6 @@ class {class_name}(RPCBase):"""
138
136
  with open(file_name, "w", encoding="utf-8") as file:
139
137
  file.write(formatted_content)
140
138
 
141
- @staticmethod
142
- def get_rpc_classes(
143
- repo_name: str,
144
- ) -> dict[Literal["connector_classes", "top_level_classes"], list[type]]:
145
- """
146
- Get all RPC-enabled classes in the specified repository.
147
-
148
- Args:
149
- repo_name(str): The name of the repository.
150
-
151
- Returns:
152
- dict: A dictionary with keys "connector_classes" and "top_level_classes" and values as lists of classes.
153
- """
154
- connector_classes = []
155
- top_level_classes = []
156
- anchor_module = importlib.import_module(f"{repo_name}.widgets")
157
- directory = os.path.dirname(anchor_module.__file__)
158
- for root, _, files in sorted(os.walk(directory)):
159
- for file in files:
160
- if not file.endswith(".py") or file.startswith("__"):
161
- continue
162
-
163
- path = os.path.join(root, file)
164
- subs = os.path.dirname(os.path.relpath(path, directory)).split("/")
165
- if len(subs) == 1 and not subs[0]:
166
- module_name = file.split(".")[0]
167
- else:
168
- module_name = ".".join(subs + [file.split(".")[0]])
169
-
170
- module = importlib.import_module(f"{repo_name}.widgets.{module_name}")
171
-
172
- for name in dir(module):
173
- obj = getattr(module, name)
174
- if not hasattr(obj, "__module__") or obj.__module__ != module.__name__:
175
- continue
176
- if isinstance(obj, type) and issubclass(obj, BECConnector):
177
- connector_classes.append(obj)
178
- if len(subs) == 1 and (
179
- issubclass(obj, QWidget) or issubclass(obj, QGraphicsWidget)
180
- ):
181
- top_level_classes.append(obj)
182
-
183
- return {"connector_classes": connector_classes, "top_level_classes": top_level_classes}
184
-
185
139
 
186
140
  def main():
187
141
  """
@@ -197,7 +151,7 @@ def main():
197
151
  current_path = os.path.dirname(__file__)
198
152
  client_path = os.path.join(current_path, "client.py")
199
153
 
200
- rpc_classes = ClientGenerator.get_rpc_classes("bec_widgets")
154
+ rpc_classes = get_rpc_classes("bec_widgets")
201
155
  rpc_classes["connector_classes"].sort(key=lambda x: x.__name__)
202
156
 
203
157
  generator = ClientGenerator()
@@ -40,7 +40,7 @@ class BECWidgetsCLIServer:
40
40
  self._shutdown_event = False
41
41
  self._heartbeat_timer = QTimer()
42
42
  self._heartbeat_timer.timeout.connect(self.emit_heartbeat)
43
- self._heartbeat_timer.start(200) # Emit heartbeat every 1 seconds
43
+ self._heartbeat_timer.start(200)
44
44
 
45
45
  def on_rpc_update(self, msg: dict, metadata: dict):
46
46
  request_id = metadata.get("request_id")
@@ -105,7 +105,7 @@ class BECWidgetsCLIServer:
105
105
  self.client.connector.set(
106
106
  MessageEndpoints.gui_heartbeat(self.gui_id),
107
107
  messages.StatusMessage(name=self.gui_id, status=1, info={}),
108
- expire=10,
108
+ expire=1,
109
109
  )
110
110
 
111
111
  def shutdown(self): # TODO not sure if needed when cleanup is done at level of BECConnector
@@ -10,8 +10,8 @@ from qtpy.QtGui import QIcon
10
10
  from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget
11
11
 
12
12
  from bec_widgets.utils import BECDispatcher, UILoader
13
- from bec_widgets.widgets import BECFigure
14
13
  from bec_widgets.widgets.dock.dock_area import BECDockArea
14
+ from bec_widgets.widgets.figure import BECFigure
15
15
  from bec_widgets.widgets.jupyter_console.jupyter_console import BECJupyterConsole
16
16
 
17
17
  # class JupyterConsoleWidget(RichJupyterWidget): # pragma: no cover:
@@ -0,0 +1,88 @@
1
+ import importlib
2
+ import inspect
3
+ import os
4
+ from typing import Literal
5
+
6
+ from bec_lib.plugin_helper import _get_available_plugins
7
+ from qtpy.QtWidgets import QGraphicsWidget, QWidget
8
+
9
+ from bec_widgets.utils import BECConnector
10
+
11
+
12
+ def get_plugin_widgets() -> dict[str, BECConnector]:
13
+ """
14
+ Get all available widgets from the plugin directory. Widgets are classes that inherit from BECConnector.
15
+ The plugins are provided through python plugins and specified in the respective pyproject.toml file using
16
+ the following key:
17
+
18
+ [project.entry-points."bec.widgets.user_widgets"]
19
+ plugin_widgets = "path.to.plugin.module"
20
+
21
+ e.g.
22
+ [project.entry-points."bec.widgets.user_widgets"]
23
+ plugin_widgets = "pxiii_bec.bec_widgets.widgets"
24
+
25
+ assuming that the widgets module for the package pxiii_bec is located at pxiii_bec/bec_widgets/widgets and
26
+ contains the widgets to be loaded within the pxiii_bec/bec_widgets/widgets/__init__.py file.
27
+
28
+ Returns:
29
+ dict[str, BECConnector]: A dictionary of widget names and their respective classes.
30
+ """
31
+ modules = _get_available_plugins("bec.widgets.user_widgets")
32
+ loaded_plugins = {}
33
+ print(modules)
34
+ for module in modules:
35
+ mods = inspect.getmembers(module, predicate=_filter_plugins)
36
+ for name, mod_cls in mods:
37
+ if name in loaded_plugins:
38
+ print(f"Duplicated widgets plugin {name}.")
39
+ loaded_plugins[name] = mod_cls
40
+ return loaded_plugins
41
+
42
+
43
+ def _filter_plugins(obj):
44
+ return inspect.isclass(obj) and issubclass(obj, BECConnector)
45
+
46
+
47
+ def get_rpc_classes(
48
+ repo_name: str,
49
+ ) -> dict[Literal["connector_classes", "top_level_classes"], list[type]]:
50
+ """
51
+ Get all RPC-enabled classes in the specified repository.
52
+
53
+ Args:
54
+ repo_name(str): The name of the repository.
55
+
56
+ Returns:
57
+ dict: A dictionary with keys "connector_classes" and "top_level_classes" and values as lists of classes.
58
+ """
59
+ connector_classes = []
60
+ top_level_classes = []
61
+ anchor_module = importlib.import_module(f"{repo_name}.widgets")
62
+ directory = os.path.dirname(anchor_module.__file__)
63
+ for root, _, files in sorted(os.walk(directory)):
64
+ for file in files:
65
+ if not file.endswith(".py") or file.startswith("__"):
66
+ continue
67
+
68
+ path = os.path.join(root, file)
69
+ subs = os.path.dirname(os.path.relpath(path, directory)).split("/")
70
+ if len(subs) == 1 and not subs[0]:
71
+ module_name = file.split(".")[0]
72
+ else:
73
+ module_name = ".".join(subs + [file.split(".")[0]])
74
+
75
+ module = importlib.import_module(f"{repo_name}.widgets.{module_name}")
76
+
77
+ for name in dir(module):
78
+ obj = getattr(module, name)
79
+ if not hasattr(obj, "__module__") or obj.__module__ != module.__name__:
80
+ continue
81
+ if isinstance(obj, type) and issubclass(obj, BECConnector):
82
+ connector_classes.append(obj)
83
+ if len(subs) == 1 and (
84
+ issubclass(obj, QWidget) or issubclass(obj, QGraphicsWidget)
85
+ ):
86
+ top_level_classes.append(obj)
87
+
88
+ return {"connector_classes": connector_classes, "top_level_classes": top_level_classes}
@@ -0,0 +1,5 @@
1
+ # from .buttons import StopButton
2
+ # from .dock import BECDock, BECDockArea
3
+ # from .figure import BECFigure, FigureConfig
4
+ # from .scan_control import ScanControl
5
+ # from .spiral_progress_bar import SpiralProgressBar
@@ -11,7 +11,7 @@ from bec_widgets.utils import BECConnector, ConnectionConfig, GridLayoutManager
11
11
  if TYPE_CHECKING:
12
12
  from qtpy.QtWidgets import QWidget
13
13
 
14
- from bec_widgets.widgets import BECDockArea
14
+ from bec_widgets.widgets.dock import BECDockArea
15
15
 
16
16
 
17
17
  class DockConfig(ConnectionConfig):
@@ -48,7 +48,7 @@ users to interact. BEC Widgets must be placed in the window:
48
48
 
49
49
  ```
50
50
  from qtpy.QWidgets import QMainWindow
51
- from bec_widgets.widgets import BECFigure
51
+ from bec_widgets.widgets.figure import BECFigure
52
52
 
53
53
  window = QMainWindow()
54
54
  bec_figure = BECFigure(gui_id="my_gui_app_id")
@@ -78,7 +78,7 @@ Final example:
78
78
  ```
79
79
  import sys
80
80
  from qtpy.QtWidgets import QMainWindow, QApplication
81
- from bec_widgets.widgets import BECFigure
81
+ from bec_widgets.widgets.figure import BECFigure
82
82
  from bec_widgets.utils.bec_dispatcher import BECDispatcher
83
83
 
84
84
  # creation of the Qt application
@@ -24,7 +24,7 @@ a `StopButton` within a GUI layout:
24
24
 
25
25
  ```python
26
26
  from qtpy.QtWidgets import QWidget, QVBoxLayout
27
- from bec_widgets.widgets import StopButton
27
+ from bec_widgets.widgets.buttons import StopButton
28
28
 
29
29
 
30
30
  class MyGui(QWidget):
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.64.0"
7
+ version = "0.64.2"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -8,7 +8,8 @@ from bec_lib.endpoints import MessageEndpoints
8
8
  from bec_widgets.cli.client_utils import _start_plot_process
9
9
  from bec_widgets.cli.rpc_register import RPCRegister
10
10
  from bec_widgets.utils import BECDispatcher
11
- from bec_widgets.widgets import BECDockArea, BECFigure
11
+ from bec_widgets.widgets.dock import BECDockArea
12
+ from bec_widgets.widgets.figure import BECFigure
12
13
 
13
14
 
14
15
  # make threads check in autouse, **will be executed at the end**; better than
@@ -2,7 +2,7 @@
2
2
 
3
3
  import pytest
4
4
 
5
- from bec_widgets.widgets import BECDock, BECDockArea
5
+ from bec_widgets.widgets.dock import BECDock, BECDockArea
6
6
 
7
7
  from .client_mocks import mocked_client
8
8
 
@@ -3,7 +3,7 @@
3
3
  import numpy as np
4
4
  import pytest
5
5
 
6
- from bec_widgets.widgets import BECFigure
6
+ from bec_widgets.widgets.figure import BECFigure
7
7
  from bec_widgets.widgets.figure.plots.image.image import BECImageShow
8
8
  from bec_widgets.widgets.figure.plots.motor_map.motor_map import BECMotorMap
9
9
  from bec_widgets.widgets.figure.plots.waveform.waveform import BECWaveform
@@ -97,17 +97,3 @@ def test_client_generator_with_black_formatting():
97
97
  generated_output_formatted = isort.code(generated_output_formatted)
98
98
 
99
99
  assert expected_output_formatted == generated_output_formatted
100
-
101
-
102
- def test_client_generator_classes():
103
- generator = ClientGenerator()
104
- out = generator.get_rpc_classes("bec_widgets")
105
- assert list(out.keys()) == ["connector_classes", "top_level_classes"]
106
- connector_cls_names = [cls.__name__ for cls in out["connector_classes"]]
107
- top_level_cls_names = [cls.__name__ for cls in out["top_level_classes"]]
108
-
109
- assert "BECFigure" in connector_cls_names
110
- assert "BECWaveform" in connector_cls_names
111
- assert "BECDockArea" in top_level_cls_names
112
- assert "BECFigure" in top_level_cls_names
113
- assert "BECWaveform" not in top_level_cls_names
@@ -0,0 +1,14 @@
1
+ from bec_widgets.utils.plugin_utils import get_rpc_classes
2
+
3
+
4
+ def test_client_generator_classes():
5
+ out = get_rpc_classes("bec_widgets")
6
+ assert list(out.keys()) == ["connector_classes", "top_level_classes"]
7
+ connector_cls_names = [cls.__name__ for cls in out["connector_classes"]]
8
+ top_level_cls_names = [cls.__name__ for cls in out["top_level_classes"]]
9
+
10
+ assert "BECFigure" in connector_cls_names
11
+ assert "BECWaveform" in connector_cls_names
12
+ assert "BECDockArea" in top_level_cls_names
13
+ assert "BECFigure" in top_level_cls_names
14
+ assert "BECWaveform" not in top_level_cls_names
@@ -5,7 +5,7 @@ import pytest
5
5
  from qtpy.QtWidgets import QLineEdit
6
6
 
7
7
  from bec_widgets.utils.widget_io import WidgetIO
8
- from bec_widgets.widgets import ScanControl
8
+ from bec_widgets.widgets.scan_control import ScanControl
9
9
  from tests.unit_tests.test_msgs.available_scans_message import available_scans_message
10
10
 
11
11
 
@@ -5,7 +5,7 @@ from bec_lib.endpoints import MessageEndpoints
5
5
  from pydantic import ValidationError
6
6
 
7
7
  from bec_widgets.utils import Colors
8
- from bec_widgets.widgets import SpiralProgressBar
8
+ from bec_widgets.widgets.spiral_progress_bar import SpiralProgressBar
9
9
  from bec_widgets.widgets.spiral_progress_bar.ring import RingConfig, RingConnections
10
10
  from bec_widgets.widgets.spiral_progress_bar.spiral_progress_bar import SpiralProgressBarConfig
11
11
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import pytest
4
4
 
5
- from bec_widgets.widgets import StopButton
5
+ from bec_widgets.widgets.buttons import StopButton
6
6
 
7
7
  from .client_mocks import mocked_client
8
8
 
@@ -1,40 +0,0 @@
1
- import inspect
2
-
3
- from bec_lib.plugin_helper import _get_available_plugins
4
-
5
- from bec_widgets.utils import BECConnector
6
-
7
-
8
- def get_plugin_widgets() -> dict[str, BECConnector]:
9
- """
10
- Get all available widgets from the plugin directory. Widgets are classes that inherit from BECConnector.
11
- The plugins are provided through python plugins and specified in the respective pyproject.toml file using
12
- the following key:
13
-
14
- [project.entry-points."bec.widgets.user_widgets"]
15
- plugin_widgets = "path.to.plugin.module"
16
-
17
- e.g.
18
- [project.entry-points."bec.widgets.user_widgets"]
19
- plugin_widgets = "pxiii_bec.bec_widgets.widgets"
20
-
21
- assuming that the widgets module for the package pxiii_bec is located at pxiii_bec/bec_widgets/widgets and
22
- contains the widgets to be loaded within the pxiii_bec/bec_widgets/widgets/__init__.py file.
23
-
24
- Returns:
25
- dict[str, BECConnector]: A dictionary of widget names and their respective classes.
26
- """
27
- modules = _get_available_plugins("bec.widgets.user_widgets")
28
- loaded_plugins = {}
29
- print(modules)
30
- for module in modules:
31
- mods = inspect.getmembers(module, predicate=_filter_plugins)
32
- for name, mod_cls in mods:
33
- if name in loaded_plugins:
34
- print(f"Duplicated widgets plugin {name}.")
35
- loaded_plugins[name] = mod_cls
36
- return loaded_plugins
37
-
38
-
39
- def _filter_plugins(obj):
40
- return inspect.isclass(obj) and issubclass(obj, BECConnector)
@@ -1,5 +0,0 @@
1
- from .buttons import StopButton
2
- from .dock import BECDock, BECDockArea
3
- from .figure import BECFigure, FigureConfig
4
- from .scan_control import ScanControl
5
- from .spiral_progress_bar import SpiralProgressBar
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes