bec-widgets 0.68.0__tar.gz → 0.69.0__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 (191) hide show
  1. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/CHANGELOG.md +10 -12
  2. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/PKG-INFO +1 -1
  3. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/client.py +4 -0
  4. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/generate_cli.py +3 -0
  5. bec_widgets-0.69.0/bec_widgets/widgets/vscode/vscode.py +86 -0
  6. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/website/website.py +10 -1
  7. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/pyproject.toml +1 -1
  8. bec_widgets-0.69.0/tests/unit_tests/test_msgs/__init__.py +0 -0
  9. bec_widgets-0.69.0/tests/unit_tests/test_vscode_widget.py +61 -0
  10. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.git_hooks/pre-commit +0 -0
  11. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.gitignore +0 -0
  12. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.gitlab/issue_templates/bug_report_template.md +0 -0
  13. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  14. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.gitlab/issue_templates/feature_request_template.md +0 -0
  15. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.gitlab/merge_request_templates/default.md +0 -0
  16. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.gitlab-ci.yml +0 -0
  17. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.pylintrc +0 -0
  18. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/.readthedocs.yaml +0 -0
  19. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/LICENSE +0 -0
  20. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/README.md +0 -0
  21. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/__init__.py +0 -0
  22. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/assets/bec_widgets_icon.png +0 -0
  23. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/assets/terminal_icon.png +0 -0
  24. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/__init__.py +0 -0
  25. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/auto_updates.py +0 -0
  26. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/client_utils.py +0 -0
  27. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/rpc_register.py +0 -0
  28. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  29. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/cli/server.py +0 -0
  30. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/__init__.py +0 -0
  31. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  32. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  33. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.ui +0 -0
  34. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/motor_movement/__init__.py +0 -0
  35. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/motor_movement/motor_control_compilations.py +0 -0
  36. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/examples/motor_movement/motor_controller.ui +0 -0
  37. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/__init__.py +0 -0
  38. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/bec_connector.py +0 -0
  39. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  40. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/bec_table.py +0 -0
  41. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/colors.py +0 -0
  42. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/container_utils.py +0 -0
  43. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/crosshair.py +0 -0
  44. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/entry_validator.py +0 -0
  45. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/layout_manager.py +0 -0
  46. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/plugin_utils.py +0 -0
  47. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  48. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/thread_checker.py +0 -0
  49. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/ui_loader.py +0 -0
  50. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/validator_delegate.py +0 -0
  51. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/widget_io.py +0 -0
  52. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  53. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/__init__.py +0 -0
  54. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  55. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
  56. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  57. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/buttons/__init__.py +0 -0
  58. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/buttons/stop_button/__init__.py +0 -0
  59. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/buttons/stop_button/stop_button.py +0 -0
  60. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/device_inputs/__init__.py +0 -0
  61. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/device_inputs/device_combobox/__init__.py +0 -0
  62. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.py +0 -0
  63. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/device_inputs/device_input_base.py +0 -0
  64. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/device_inputs/device_line_edit/__init__.py +0 -0
  65. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.py +0 -0
  66. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/dock/__init__.py +0 -0
  67. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/dock/dock.py +0 -0
  68. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/dock/dock_area.py +0 -0
  69. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/__init__.py +0 -0
  70. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/figure.py +0 -0
  71. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  72. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  73. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  74. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  75. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  76. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  77. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  78. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  79. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  80. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  81. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  82. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  83. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  84. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/__init__.py +0 -0
  85. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/motor_control.py +0 -0
  86. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/motor_table/__init__.py +0 -0
  87. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/motor_table/motor_table.py +0 -0
  88. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/motor_table/motor_table.ui +0 -0
  89. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/movement_absolute/__init__.py +0 -0
  90. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py +0 -0
  91. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.ui +0 -0
  92. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/movement_relative/__init__.py +0 -0
  93. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.py +0 -0
  94. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.ui +0 -0
  95. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/selection/__init__.py +0 -0
  96. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/selection/selection.py +0 -0
  97. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/motor_control/selection/selection.ui +0 -0
  98. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  99. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  100. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/spiral_progress_bar/__init__.py +0 -0
  101. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/spiral_progress_bar/ring.py +0 -0
  102. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py +0 -0
  103. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/text_box/__init__.py +0 -0
  104. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/text_box/text_box.py +0 -0
  105. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/toolbar/__init__.py +0 -0
  106. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/bec_widgets/widgets/toolbar/toolbar.py +0 -0
  107. {bec_widgets-0.68.0/bec_widgets/widgets/website → bec_widgets-0.69.0/bec_widgets/widgets/vscode}/__init__.py +0 -0
  108. {bec_widgets-0.68.0/tests → bec_widgets-0.69.0/bec_widgets/widgets/website}/__init__.py +0 -0
  109. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/Makefile +0 -0
  110. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/_static/custom.css +0 -0
  111. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/_templates/custom-class-template.rst +0 -0
  112. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/_templates/custom-module-template.rst +0 -0
  113. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/api_reference/api_reference.md +0 -0
  114. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/apps_48dp.svg +0 -0
  115. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/display_settings_48dp.svg +0 -0
  116. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/index_api.svg +0 -0
  117. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/index_contribute.svg +0 -0
  118. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/index_getting_started.svg +0 -0
  119. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/index_user_guide.svg +0 -0
  120. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/assets/rocket_launch_48dp.svg +0 -0
  121. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/conf.py +0 -0
  122. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/developer/developer.md +0 -0
  123. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/developer/getting_started/development.md +0 -0
  124. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/developer/getting_started/getting_started.md +0 -0
  125. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/developer/widgets/widgets.md +0 -0
  126. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/index.md +0 -0
  127. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/introduction/introduction.md +0 -0
  128. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/make.bat +0 -0
  129. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/requirements.txt +0 -0
  130. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/api_reference/api_reference.md +0 -0
  131. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/applications/applications.md +0 -0
  132. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/customisation.md +0 -0
  133. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/getting_started/BECDockArea.png +0 -0
  134. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/getting_started/auto_updates.md +0 -0
  135. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/getting_started/getting_started.md +0 -0
  136. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/getting_started/gui_complex_gui.gif +0 -0
  137. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/getting_started/installation.md +0 -0
  138. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/getting_started/quick_start.md +0 -0
  139. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/user.md +0 -0
  140. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/BECFigure.png +0 -0
  141. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/bec_figure.md +0 -0
  142. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/bec_status_box.gif +0 -0
  143. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/bec_status_box.md +0 -0
  144. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/buttons.md +0 -0
  145. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/image_plot.gif +0 -0
  146. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/motor.gif +0 -0
  147. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/progress_bar.gif +0 -0
  148. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/scatter_2D.gif +0 -0
  149. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/spiral_progress_bar.md +0 -0
  150. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/text_box.md +0 -0
  151. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/w1D.gif +0 -0
  152. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/website.md +0 -0
  153. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/docs/user/widgets/widgets.md +0 -0
  154. {bec_widgets-0.68.0/tests/end-2-end → bec_widgets-0.69.0/tests}/__init__.py +0 -0
  155. {bec_widgets-0.68.0/tests/unit_tests → bec_widgets-0.69.0/tests/end-2-end}/__init__.py +0 -0
  156. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/end-2-end/conftest.py +0 -0
  157. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/end-2-end/test_bec_dock_rpc_e2e.py +0 -0
  158. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
  159. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
  160. {bec_widgets-0.68.0/tests/unit_tests/test_msgs → bec_widgets-0.69.0/tests/unit_tests}/__init__.py +0 -0
  161. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/client_mocks.py +0 -0
  162. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/conftest.py +0 -0
  163. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_bec_connector.py +0 -0
  164. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_bec_dispatcher.py +0 -0
  165. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_bec_dock.py +0 -0
  166. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_bec_figure.py +0 -0
  167. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_bec_motor_map.py +0 -0
  168. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_bec_status_box.py +0 -0
  169. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_client_utils.py +0 -0
  170. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_color_validation.py +0 -0
  171. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_configs/config_device.yaml +0 -0
  172. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
  173. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
  174. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_crosshair.py +0 -0
  175. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_device_input_base.py +0 -0
  176. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_device_input_widgets.py +0 -0
  177. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_generate_cli_client.py +0 -0
  178. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_motor_control.py +0 -0
  179. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
  180. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_plot_base.py +0 -0
  181. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_plugin_utils.py +0 -0
  182. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_rpc_register.py +0 -0
  183. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_rpc_widget_handler.py +0 -0
  184. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_scan_control.py +0 -0
  185. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_spiral_progress_bar.py +0 -0
  186. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_stop_button.py +0 -0
  187. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_text_box_widget.py +0 -0
  188. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_waveform1d.py +0 -0
  189. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_website_widget.py +0 -0
  190. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_widget_io.py +0 -0
  191. {bec_widgets-0.68.0 → bec_widgets-0.69.0}/tests/unit_tests/test_yaml_dialog.py +0 -0
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.69.0 (2024-06-21)
4
+
5
+ ### Feature
6
+
7
+ * feat(widgets): added vscode widget ([`48ae950`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/48ae950d57b454307ce409e2511f7b7adf3cfc6b))
8
+
9
+ ### Fix
10
+
11
+ * fix(generate_cli): fixed rpc generate for classes without user access; closes #226 ([`925c893`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/925c893f3ff4337fc8b4d237c8ffc19a597b0996))
12
+
3
13
  ## v0.68.0 (2024-06-21)
4
14
 
5
15
  ### Feature
@@ -166,15 +176,3 @@ on SIGTERM ([`9263f8e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9263f8ef5
166
176
  ### Test
167
177
 
168
178
  * test: add test for text box ([`b49462a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b49462abeb186e56bac79d2ef0b0add1ef28a1a5))
169
-
170
- ### Unknown
171
-
172
- * Revert "feat: implement non-polling, interruptible waiting of gui instruction response with timeout"
173
-
174
- This reverts commit abc6caa2d0b6141dfbe1f3d025f78ae14deddcb3 ([`fe04dd8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/fe04dd80e59a0e74f7fdea603e0642707ecc7c2a))
175
-
176
- ## v0.62.0 (2024-06-12)
177
-
178
- ### Unknown
179
-
180
- * doc: add documentation about creating custom GUI applications embedding BEC Widgets ([`17a0068`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/17a00687579f5efab1990cd83862ec0e78198633))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.68.0
3
+ Version: 0.69.0
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
@@ -19,6 +19,7 @@ class Widgets(str, enum.Enum):
19
19
  BECFigure = "BECFigure"
20
20
  SpiralProgressBar = "SpiralProgressBar"
21
21
  TextBox = "TextBox"
22
+ VSCodeEditor = "VSCodeEditor"
22
23
  WebsiteWidget = "WebsiteWidget"
23
24
 
24
25
 
@@ -2049,6 +2050,9 @@ class TextBox(RPCBase):
2049
2050
  """
2050
2051
 
2051
2052
 
2053
+ class VSCodeEditor(RPCBase): ...
2054
+
2055
+
2052
2056
  class WebsiteWidget(RPCBase):
2053
2057
  @rpc_call
2054
2058
  def set_url(self, url: str) -> None:
@@ -83,6 +83,9 @@ class {class_name}(RPCBase, BECGuiClientMixin):"""
83
83
  else:
84
84
  self.content += f"""
85
85
  class {class_name}(RPCBase):"""
86
+ if not cls.USER_ACCESS:
87
+ self.content += """...
88
+ """
86
89
  for method in cls.USER_ACCESS:
87
90
  obj = getattr(cls, method)
88
91
  if isinstance(obj, property):
@@ -0,0 +1,86 @@
1
+ import os
2
+ import select
3
+ import shlex
4
+ import signal
5
+ import subprocess
6
+ import sys
7
+
8
+ from bec_widgets.widgets.website.website import WebsiteWidget
9
+
10
+
11
+ class VSCodeEditor(WebsiteWidget):
12
+ """
13
+ A widget to display the VSCode editor.
14
+ """
15
+
16
+ token = "bec"
17
+ host = "127.0.0.1"
18
+ port = 7000
19
+
20
+ USER_ACCESS = []
21
+
22
+ def __init__(self, parent=None, config=None, client=None, gui_id=None):
23
+
24
+ self.process = None
25
+ self._url = f"http://{self.host}:{self.port}?tkn={self.token}"
26
+ super().__init__(parent=parent, config=config, client=client, gui_id=gui_id)
27
+ self.start_server()
28
+
29
+ def start_server(self):
30
+ """
31
+ Start the server.
32
+
33
+ This method starts the server for the VSCode editor in a subprocess.
34
+ """
35
+
36
+ cmd = shlex.split(
37
+ f"code serve-web --port {self.port} --connection-token={self.token} --accept-server-license-terms"
38
+ )
39
+ self.process = subprocess.Popen(
40
+ cmd, text=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, preexec_fn=os.setsid
41
+ )
42
+
43
+ os.set_blocking(self.process.stdout.fileno(), False)
44
+ while self.process.poll() is None:
45
+ readylist, _, _ = select.select([self.process.stdout], [], [], 1)
46
+ if self.process.stdout in readylist:
47
+ output = self.process.stdout.read(1024)
48
+ if output and f"available at {self._url}" in output:
49
+ break
50
+ self.set_url(self._url)
51
+
52
+ def closeEvent(self, event):
53
+ """
54
+ Hook for the close event to terminate the server.
55
+ """
56
+ self.cleanup_vscode()
57
+ super().closeEvent(event)
58
+
59
+ def cleanup_vscode(self):
60
+ """
61
+ Cleanup the VSCode editor.
62
+ """
63
+ if not self.process:
64
+ return
65
+ os.killpg(os.getpgid(self.process.pid), signal.SIGTERM)
66
+ self.process.wait()
67
+
68
+ def cleanup(self):
69
+ """
70
+ Cleanup the widget. This method is called from the dock area when the widget is removed.
71
+ """
72
+ self.cleanup_vscode()
73
+ return super().cleanup()
74
+
75
+
76
+ if __name__ == "__main__": # pragma: no cover
77
+ import sys
78
+
79
+ from qtpy.QtWidgets import QApplication
80
+
81
+ app = QApplication(sys.argv)
82
+ widget = VSCodeEditor()
83
+ widget.show()
84
+ app.exec_()
85
+ widget.bec_dispatcher.disconnect_all()
86
+ widget.client.shutdown()
@@ -1,10 +1,19 @@
1
- from qtpy.QtCore import QUrl
1
+ from qtpy.QtCore import QUrl, qInstallMessageHandler
2
2
  from qtpy.QtWebEngineWidgets import QWebEngineView
3
3
  from qtpy.QtWidgets import QApplication
4
4
 
5
5
  from bec_widgets.utils import BECConnector
6
6
 
7
7
 
8
+ def suppress_qt_messages(type_, context, msg):
9
+ if context.category in ["js", "default"]:
10
+ return
11
+ print(msg)
12
+
13
+
14
+ qInstallMessageHandler(suppress_qt_messages)
15
+
16
+
8
17
  class WebsiteWidget(BECConnector, QWebEngineView):
9
18
  """
10
19
  A simple widget to display a website
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.68.0"
7
+ version = "0.69.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -0,0 +1,61 @@
1
+ import os
2
+ import shlex
3
+ import subprocess
4
+ from unittest import mock
5
+
6
+ import pytest
7
+
8
+ from bec_widgets.widgets.vscode.vscode import VSCodeEditor
9
+
10
+ from .client_mocks import mocked_client
11
+
12
+
13
+ @pytest.fixture
14
+ def vscode_widget(qtbot, mocked_client):
15
+ with mock.patch("bec_widgets.widgets.vscode.vscode.subprocess.Popen") as mock_popen:
16
+ widget = VSCodeEditor(client=mocked_client)
17
+ yield widget
18
+
19
+
20
+ def test_vscode_widget(qtbot, vscode_widget):
21
+ assert vscode_widget.process is not None
22
+ assert vscode_widget._url == "http://127.0.0.1:7000?tkn=bec"
23
+
24
+
25
+ def test_start_server(qtbot, mocked_client):
26
+
27
+ with mock.patch("bec_widgets.widgets.vscode.vscode.subprocess.Popen") as mock_popen:
28
+ mock_process = mock.Mock()
29
+ mock_process.stdout.fileno.return_value = 1
30
+ mock_process.poll.return_value = None
31
+ mock_process.stdout.read.return_value = (
32
+ f"available at http://{VSCodeEditor.host}:{VSCodeEditor.port}?tkn={VSCodeEditor.token}"
33
+ )
34
+ mock_popen.return_value = mock_process
35
+
36
+ widget = VSCodeEditor(client=mocked_client)
37
+
38
+ mock_popen.assert_called_once_with(
39
+ shlex.split(
40
+ f"code serve-web --port {widget.port} --connection-token={widget.token} --accept-server-license-terms"
41
+ ),
42
+ text=True,
43
+ stdout=subprocess.PIPE,
44
+ stderr=subprocess.DEVNULL,
45
+ preexec_fn=os.setsid,
46
+ )
47
+
48
+
49
+ def test_close_event(qtbot, vscode_widget):
50
+ with mock.patch("bec_widgets.widgets.vscode.vscode.os.killpg") as mock_killpg:
51
+ with mock.patch("bec_widgets.widgets.vscode.vscode.os.getpgid") as mock_getpgid:
52
+ with mock.patch(
53
+ "bec_widgets.widgets.website.website.WebsiteWidget.closeEvent"
54
+ ) as mock_close_event:
55
+ mock_getpgid.return_value = 123
56
+ vscode_widget.process = mock.Mock()
57
+ vscode_widget.process.pid = 123
58
+ vscode_widget.closeEvent(None)
59
+ mock_killpg.assert_called_once_with(123, 15)
60
+ vscode_widget.process.wait.assert_called_once()
61
+ mock_close_event.assert_called_once()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes