bec-server 4.3.2__tar.gz → 4.4.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 (212) hide show
  1. {bec_server-4.3.2 → bec_server-4.4.0}/PKG-INFO +1 -1
  2. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/devices/config_update_handler.py +6 -0
  3. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/file_writer.py +4 -1
  4. {bec_server-4.3.2 → bec_server-4.4.0}/pyproject.toml +1 -1
  5. bec_server-4.4.0/tests/tests_device_server/test_config_metadata_refresh.py +56 -0
  6. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_file_writer/test_file_writer.py +29 -1
  7. {bec_server-4.3.2 → bec_server-4.4.0}/.gitignore +0 -0
  8. {bec_server-4.3.2 → bec_server-4.4.0}/.zed/debug.json +0 -0
  9. {bec_server-4.3.2 → bec_server-4.4.0}/README.md +0 -0
  10. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/__init__.py +0 -0
  11. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/actors/__init__.py +0 -0
  12. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/actors/actor.py +0 -0
  13. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/actors/builtin_actor_manager.py +0 -0
  14. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/actors/manager.py +0 -0
  15. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/actors/scan_interlock.py +0 -0
  16. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/actors/worker.py +0 -0
  17. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/bec_server_utils/__init__.py +0 -0
  18. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/bec_server_utils/launch.py +0 -0
  19. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/bec_server_utils/service_handler.py +0 -0
  20. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/bec_server_utils/subprocess_launch.py +0 -0
  21. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/bec_server_utils/tmux_launch.py +0 -0
  22. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/__init__.py +0 -0
  23. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/cli/__init__.py +0 -0
  24. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/cli/launch.py +0 -0
  25. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/dap_server.py +0 -0
  26. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/dap_service.py +0 -0
  27. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/dap_service_manager.py +0 -0
  28. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/data_processing/lmfit1d_service.py +0 -0
  29. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/__init__.py +0 -0
  30. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/bec_message_handler.py +0 -0
  31. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/cli/__init__.py +0 -0
  32. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/cli/launch.py +0 -0
  33. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/device_server.py +0 -0
  34. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/devices/__init__.py +0 -0
  35. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/devices/device_serializer.py +0 -0
  36. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/devices/devicemanager.py +0 -0
  37. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/friendly_device_exceptions.py +0 -0
  38. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/ophyd_callback_monitor.py +0 -0
  39. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/rpc_handler.py +0 -0
  40. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/tests/__init__.py +0 -0
  41. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/device_server/tests/utils.py +0 -0
  42. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/__init__.py +0 -0
  43. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/async_writer.py +0 -0
  44. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/cli/__init__.py +0 -0
  45. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/cli/launch.py +0 -0
  46. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/default_writer.py +0 -0
  47. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/file_writer_manager.py +0 -0
  48. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/file_writer/merged_dicts.py +0 -0
  49. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/Containerfile.bec_linux_base +0 -0
  50. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/Containerfile.requirements +0 -0
  51. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/Containerfile.worker +0 -0
  52. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/__init__.py +0 -0
  53. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/_dev_runner.py +0 -0
  54. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/builtin_procedures.py +0 -0
  55. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/constants.py +0 -0
  56. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/container_utils.py +0 -0
  57. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/container_worker.py +0 -0
  58. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/manager.py +0 -0
  59. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/oop_worker_base.py +0 -0
  60. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/procedure_registry.py +0 -0
  61. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/protocol.py +0 -0
  62. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/queue_manager.py +0 -0
  63. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/subprocess_worker.py +0 -0
  64. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/procedures/worker_base.py +0 -0
  65. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_bundler/__init__.py +0 -0
  66. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_bundler/bec_emitter.py +0 -0
  67. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_bundler/cli/__init__.py +0 -0
  68. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_bundler/cli/launch.py +0 -0
  69. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_bundler/emitter.py +0 -0
  70. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_bundler/scan_bundler.py +0 -0
  71. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/__init__.py +0 -0
  72. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/beamline_state_manager.py +0 -0
  73. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/cli/__init__.py +0 -0
  74. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/cli/launch.py +0 -0
  75. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/device_lock_registry.py +0 -0
  76. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/direct_scan_worker.py +0 -0
  77. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/errors.py +0 -0
  78. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/instruction_handler.py +0 -0
  79. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scan_assembler.py +0 -0
  80. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scan_guard.py +0 -0
  81. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scan_manager.py +0 -0
  82. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scan_queue.py +0 -0
  83. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scan_server.py +0 -0
  84. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scan_worker.py +0 -0
  85. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/__init__.py +0 -0
  86. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/acquire.py +0 -0
  87. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/cont_line_scan.py +0 -0
  88. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/device_rpc.py +0 -0
  89. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/fermat_scan.py +0 -0
  90. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/grid_scan.py +0 -0
  91. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/hexagonal_scan.py +0 -0
  92. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/line_scan.py +0 -0
  93. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/line_sweep_scan.py +0 -0
  94. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/list_scan.py +0 -0
  95. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/log_scan.py +0 -0
  96. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/move.py +0 -0
  97. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/multi_region_grid_scan.py +0 -0
  98. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/multi_region_line_scan.py +0 -0
  99. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/path_optimization.py +0 -0
  100. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/position_generators.py +0 -0
  101. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/round_roi_scan.py +0 -0
  102. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/round_scan.py +0 -0
  103. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/scan_actions.py +0 -0
  104. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/scan_argument_modifier.py +0 -0
  105. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/scan_base.py +0 -0
  106. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/scan_components.py +0 -0
  107. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/scan_modifier.py +0 -0
  108. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/scan_status.py +0 -0
  109. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/time_scan.py +0 -0
  110. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/scans/updated_move.py +0 -0
  111. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/tests/__init__.py +0 -0
  112. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/tests/fixtures.py +0 -0
  113. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/tests/scan_fixtures.py +0 -0
  114. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/tests/scan_hook_tests.py +0 -0
  115. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scan_server/tests/utils.py +0 -0
  116. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/__init__.py +0 -0
  117. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/__init__.py +0 -0
  118. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/atlas_active_client_emitter.py +0 -0
  119. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/atlas_connector.py +0 -0
  120. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/atlas_forwarder.py +0 -0
  121. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/atlas_metadata_handler.py +0 -0
  122. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/atlas_plugin_repo_emitter.py +0 -0
  123. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/atlas/config_handler.py +0 -0
  124. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/cli/__init__.py +0 -0
  125. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/cli/launch.py +0 -0
  126. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/scihub.py +0 -0
  127. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/service_handler/__init__.py +0 -0
  128. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/scihub/service_handler/service_handler.py +0 -0
  129. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/test/__init__.py +0 -0
  130. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/test/actor_test_utils.py +0 -0
  131. {bec_server-4.3.2 → bec_server-4.4.0}/bec_server/test/helpers.py +0 -0
  132. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_actors/test_actors.py +0 -0
  133. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_bec_server_utils/test_main.py +0 -0
  134. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_bec_server_utils/test_service_handler.py +0 -0
  135. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_bec_server_utils/test_subprocess_launch.py +0 -0
  136. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_bec_server_utils/test_tmux_launch.py +0 -0
  137. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_data_processing/conftest.py +0 -0
  138. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_data_processing/test_dap_cli_launch.py +0 -0
  139. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_data_processing/test_dap_server.py +0 -0
  140. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_data_processing/test_dap_service_manager.py +0 -0
  141. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_data_processing/test_lmfit1d_service.py +0 -0
  142. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/conftest.py +0 -0
  143. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_config_handler.py +0 -0
  144. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_device_instructions.py +0 -0
  145. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_device_manager_ds.py +0 -0
  146. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_device_serializer.py +0 -0
  147. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_device_server.py +0 -0
  148. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_device_server_cli_launch.py +0 -0
  149. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_ophyd_callback_monitor.py +0 -0
  150. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_device_server/test_rpc_handler.py +0 -0
  151. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_file_writer/conftest.py +0 -0
  152. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_file_writer/test_async_file_writer.py +0 -0
  153. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_file_writer/test_file_writer_cli_launch.py +0 -0
  154. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_file_writer/test_file_writer_manager.py +0 -0
  155. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_bundler/conftest.py +0 -0
  156. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_bundler/test_bec_emitter.py +0 -0
  157. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_bundler/test_scan_bundler.py +0 -0
  158. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_bundler/test_scan_bundler_cli_launch.py +0 -0
  159. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/conftest.py +0 -0
  160. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/__init__.py +0 -0
  161. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_acquire.py +0 -0
  162. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_cont_line_scan.py +0 -0
  163. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_device_rpc_scan.py +0 -0
  164. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_fermat_scan.py +0 -0
  165. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_grid_scan.py +0 -0
  166. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_hexagonal_scan.py +0 -0
  167. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_line_scan.py +0 -0
  168. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_line_sweep_scan.py +0 -0
  169. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_list_scan.py +0 -0
  170. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_log_scan.py +0 -0
  171. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_move_scan.py +0 -0
  172. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_multi_region_grid_scan.py +0 -0
  173. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_multi_region_line_scan.py +0 -0
  174. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_position_preview.py +0 -0
  175. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_relative_scan_return_to_start.py +0 -0
  176. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_round_roi_scan.py +0 -0
  177. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_round_scan.py +0 -0
  178. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_scan_actions.py +0 -0
  179. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_scan_components.py +0 -0
  180. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_scan_status.py +0 -0
  181. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_time_scan.py +0 -0
  182. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/scans/test_updated_move_scan.py +0 -0
  183. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_beamline_state_manager.py +0 -0
  184. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_builtin_actor_manager.py +0 -0
  185. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_container_utils.py +0 -0
  186. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_device_lock_registry.py +0 -0
  187. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_direct_scan_worker.py +0 -0
  188. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_instruction_handler.py +0 -0
  189. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_path_optimization.py +0 -0
  190. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_procedure_container_worker.py +0 -0
  191. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_procedure_queue_pool.py +0 -0
  192. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_procedure_submission.py +0 -0
  193. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_procedure_subprocess_worker.py +0 -0
  194. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_procedures.py +0 -0
  195. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_argument_modifier.py +0 -0
  196. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_assembler.py +0 -0
  197. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_fixture_imports.py +0 -0
  198. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_guard.py +0 -0
  199. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_interlock.py +0 -0
  200. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_modifier.py +0 -0
  201. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_server_cli_launch.py +0 -0
  202. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_server_queue.py +0 -0
  203. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_server_scan_manager.py +0 -0
  204. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scan_server/test_scan_worker.py +0 -0
  205. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/conftest.py +0 -0
  206. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_atlas_active_client_emitter.py +0 -0
  207. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_atlas_config_handler.py +0 -0
  208. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_atlas_connector.py +0 -0
  209. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_atlas_forwarder.py +0 -0
  210. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_atlas_metadata_handler.py +0 -0
  211. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_atlas_plugin_repo_emitter.py +0 -0
  212. {bec_server-4.3.2 → bec_server-4.4.0}/tests/tests_scihub/test_scihub_cli_launch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: bec-server
3
- Version: 4.3.2
3
+ Version: 4.4.0
4
4
  Summary: BEC server
5
5
  Project-URL: Bug Tracker, https://github.com/bec-project/bec/issues
6
6
  Project-URL: Homepage, https://github.com/bec-project/bec
@@ -238,8 +238,14 @@ class ConfigUpdateHandler:
238
238
  # apply config
239
239
  try:
240
240
  self.device_manager.update_config(device.obj, new_config)
241
+ # Persistence flags and other signal metadata can change with config.
242
+ # Publish before acknowledgement and the subsequent proxy update.
243
+ error = self.device_manager.publish_device_info(device.obj)
244
+ if error is not None:
245
+ raise error
241
246
  except Exception as exc:
242
247
  self.device_manager.update_config(device.obj, old_config)
248
+ self.device_manager.publish_device_info(device.obj)
243
249
  raise DeviceConfigError(f"Error during object update. {exc}")
244
250
 
245
251
  if "limits" in dev_config["deviceConfig"]:
@@ -9,6 +9,7 @@ from collections import defaultdict
9
9
  from copy import deepcopy
10
10
 
11
11
  import h5py
12
+ import numpy as np
12
13
  from pydantic import BaseModel
13
14
 
14
15
  from bec_lib import messages, plugin_helper
@@ -164,6 +165,8 @@ class HDF5StorageWriter:
164
165
  data = json.dumps(data)
165
166
  elif not all(isinstance(x, type(data[0])) for x in data):
166
167
  data = json.dumps(data)
168
+ if isinstance(data, np.ndarray) and data.dtype.kind == "U":
169
+ data = data.astype(h5py.string_dtype(encoding="utf-8"))
167
170
  dataset = container.create_dataset(name, data=data)
168
171
  self.add_attribute(dataset, val.attrs)
169
172
  self.add_content(dataset, val._storage)
@@ -175,7 +178,7 @@ class HDF5StorageWriter:
175
178
  container.attrs["signal"] = "value"
176
179
  except Exception:
177
180
  content = traceback.format_exc()
178
- logger.error(f"Failed to write dataset {name}: {content}")
181
+ logger.error(f"Failed to write dataset {container.name}/{name}: {content}")
179
182
  return
180
183
 
181
184
  def add_attribute(self, container: typing.Any, attributes: dict):
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec-server"
7
- version = "4.3.2"
7
+ version = "4.4.0"
8
8
  description = "BEC server"
9
9
  requires-python = ">=3.11"
10
10
  classifiers = [
@@ -0,0 +1,56 @@
1
+ """Runtime config updates publish signal metadata before acknowledgement."""
2
+
3
+ import threading
4
+ from types import SimpleNamespace
5
+ from unittest import mock
6
+
7
+ import pytest
8
+
9
+ from bec_lib.bec_errors import DeviceConfigError
10
+ from bec_lib.messages import DeviceConfigMessage
11
+ from bec_server.device_server.devices.config_update_handler import ConfigUpdateHandler
12
+
13
+
14
+ def make_handler():
15
+ device = SimpleNamespace(save_roi_data=True)
16
+ manager = SimpleNamespace(
17
+ devices={
18
+ "camera": SimpleNamespace(
19
+ obj=device, enabled=True, _config={"deviceConfig": {"save_roi_data": True}}
20
+ )
21
+ },
22
+ update_config=mock.Mock(
23
+ side_effect=lambda obj, cfg: setattr(obj, "save_roi_data", cfg["save_roi_data"])
24
+ ),
25
+ publish_device_info=mock.Mock(return_value=None),
26
+ )
27
+ return SimpleNamespace(device_manager=manager), device
28
+
29
+
30
+ def test_update_config_republishes_metadata_after_applying_values():
31
+ handler, device = make_handler()
32
+ observed = []
33
+ handler.device_manager.publish_device_info.side_effect = lambda obj: observed.append(
34
+ obj.save_roi_data
35
+ )
36
+ msg = DeviceConfigMessage(
37
+ action="update", config={"camera": {"deviceConfig": {"save_roi_data": False}}}
38
+ )
39
+ ConfigUpdateHandler._update_config(handler, msg, threading.Event())
40
+ assert observed == [False]
41
+ handler.device_manager.publish_device_info.assert_called_once_with(device)
42
+
43
+
44
+ def test_failed_metadata_publication_restores_old_config_and_metadata():
45
+ handler, device = make_handler()
46
+ handler.device_manager.publish_device_info.side_effect = [
47
+ RuntimeError("Metadata unavailable"),
48
+ None,
49
+ ]
50
+ msg = DeviceConfigMessage(
51
+ action="update", config={"camera": {"deviceConfig": {"save_roi_data": False}}}
52
+ )
53
+ with pytest.raises(DeviceConfigError, match="Metadata unavailable"):
54
+ ConfigUpdateHandler._update_config(handler, msg, threading.Event())
55
+ assert device.save_roi_data is True
56
+ assert handler.device_manager.publish_device_info.call_count == 2
@@ -10,7 +10,11 @@ from bec_lib import messages, plugin_helper
10
10
  from bec_lib.endpoints import MessageEndpoints
11
11
  from bec_server.file_writer import HDF5FileWriter
12
12
  from bec_server.file_writer.default_writer import DefaultFormat
13
- from bec_server.file_writer.file_writer import AdditionalScanMetadata, HDF5Storage
13
+ from bec_server.file_writer.file_writer import (
14
+ AdditionalScanMetadata,
15
+ HDF5Storage,
16
+ HDF5StorageWriter,
17
+ )
14
18
  from bec_server.file_writer.file_writer_manager import ScanStorage
15
19
 
16
20
 
@@ -647,3 +651,27 @@ def test_hdf5_writer_forwards_written_async_signals(tmp_path, hdf5_file_writer,
647
651
  )
648
652
 
649
653
  assert CapturingFormatForTest.last_written_async_signals == {"waveform": ["waveform_data"]}
654
+
655
+
656
+ @pytest.mark.parametrize(
657
+ "data",
658
+ [
659
+ np.array(["cam.acquire_time", "roi1.selected_operations"]),
660
+ np.array([["µm", "曝光"], ["ROI", ""]]),
661
+ np.array([], dtype="U33"),
662
+ np.array("roi1.selected_operations"),
663
+ ],
664
+ )
665
+ def test_storage_writer_numpy_unicode(tmp_path, data):
666
+ """Configuration string arrays retain their shape and Unicode text in HDF5."""
667
+ storage = HDF5Storage()
668
+ dataset = storage.create_dataset("value", data=data)
669
+ dataset.attrs["description"] = "Configuration names"
670
+ path = tmp_path / "strings.h5"
671
+ with h5py.File(path, "w") as handle:
672
+ HDF5StorageWriter.write(storage._storage, handle)
673
+ with h5py.File(path, "r") as handle:
674
+ assert "value" in handle
675
+ assert handle["value"].shape == data.shape
676
+ np.testing.assert_array_equal(handle["value"].asstr()[()], data)
677
+ assert handle["value"].attrs["description"] == "Configuration names"
File without changes
File without changes
File without changes