bec-lib 3.167.0__tar.gz → 3.167.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 (154) hide show
  1. {bec_lib-3.167.0 → bec_lib-3.167.2}/PKG-INFO +1 -1
  2. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_report.py +13 -2
  3. {bec_lib-3.167.0 → bec_lib-3.167.2}/pyproject.toml +1 -1
  4. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_report.py +53 -0
  5. {bec_lib-3.167.0 → bec_lib-3.167.2}/.gitignore +0 -0
  6. {bec_lib-3.167.0 → bec_lib-3.167.2}/README.md +0 -0
  7. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/__init__.py +0 -0
  8. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/_print_versions.py +0 -0
  9. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/acl_login.py +0 -0
  10. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/actors.py +0 -0
  11. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/alarm_handler.py +0 -0
  12. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/atlas_models.py +0 -0
  13. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/bec_errors.py +0 -0
  14. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/bec_service.py +0 -0
  15. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/bec_yaml_loader.py +0 -0
  16. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/bl_state_manager.py +0 -0
  17. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/bl_states.py +0 -0
  18. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/builtin_actor_hli.py +0 -0
  19. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/callback_handler.py +0 -0
  20. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/channel_monitor.py +0 -0
  21. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/client.py +0 -0
  22. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/codecs.py +0 -0
  23. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/config_helper.py +0 -0
  24. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/config_values.py +0 -0
  25. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/configs/__init__.py +0 -0
  26. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/configs/demo_config.yaml +0 -0
  27. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/configs/openapi_schema.json +0 -0
  28. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/connector.py +0 -0
  29. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/dap_plugin_objects.py +0 -0
  30. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/dap_plugins.py +0 -0
  31. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/device.py +0 -0
  32. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/devicemanager.py +0 -0
  33. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/endpoints.py +0 -0
  34. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/file_utils.py +0 -0
  35. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/live_scan_data.py +0 -0
  36. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/lmfit_serializer.py +0 -0
  37. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/logger.py +0 -0
  38. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/macro_update_handler.py +0 -0
  39. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/messages.py +0 -0
  40. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/messaging_hooks.py +0 -0
  41. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/messaging_services.py +0 -0
  42. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/metadata_schema.py +0 -0
  43. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/numpy_encoder.py +0 -0
  44. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/observer.py +0 -0
  45. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/pdf_writer.py +0 -0
  46. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/plugin_helper.py +0 -0
  47. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/procedures/__init__.py +0 -0
  48. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/procedures/helper.py +0 -0
  49. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/procedures/hli.py +0 -0
  50. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/procedures/status.py +0 -0
  51. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/queue_items.py +0 -0
  52. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/redis_connector/__init__.py +0 -0
  53. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/redis_connector/constants.py +0 -0
  54. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/redis_connector/hli.py +0 -0
  55. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/redis_connector/managed_redis_connection.py +0 -0
  56. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/redis_connector/streams.py +0 -0
  57. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/redis_connector/validation.py +0 -0
  58. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/request_context.py +0 -0
  59. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/request_items.py +0 -0
  60. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_args.py +0 -0
  61. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_data_container.py +0 -0
  62. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_history.py +0 -0
  63. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_input_validator.py +0 -0
  64. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_items.py +0 -0
  65. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_manager.py +0 -0
  66. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_number_container.py +0 -0
  67. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scan_repeat.py +0 -0
  68. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scans.py +0 -0
  69. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/scibec_validator.py +0 -0
  70. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/script_executor.py +0 -0
  71. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/serialization.py +0 -0
  72. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/serialization_registry.py +0 -0
  73. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/service_config.py +0 -0
  74. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/signature_serializer.py +0 -0
  75. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/tests/__init__.py +0 -0
  76. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/tests/fixtures.py +0 -0
  77. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/tests/test_config.yaml +0 -0
  78. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/tests/test_service_config.yaml +0 -0
  79. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/tests/utils.py +0 -0
  80. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/user_macros.py +0 -0
  81. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/__init__.py +0 -0
  82. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/copier_jinja_filters.py +0 -0
  83. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/import_utils.py +0 -0
  84. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/json_extended.py +0 -0
  85. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/__init__.py +0 -0
  86. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/_constants.py +0 -0
  87. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/_util.py +0 -0
  88. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/create/__init__.py +0 -0
  89. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/create/device.py +0 -0
  90. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/create/scan.py +0 -0
  91. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/create/templates/v4_scan.py.jinja +0 -0
  92. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/plugin_manager/main.py +0 -0
  93. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/proxy.py +0 -0
  94. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/pydantic_pretty_print.py +0 -0
  95. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/rpc_utils.py +0 -0
  96. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/scan_utils.py +0 -0
  97. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/threading_utils.py +0 -0
  98. {bec_lib-3.167.0 → bec_lib-3.167.2}/bec_lib/utils/user_acls_test.py +0 -0
  99. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/__init__.py +0 -0
  100. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/_additional_for_signature_serializer_test.py +0 -0
  101. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/conftest.py +0 -0
  102. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_acl_login.py +0 -0
  103. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_alarm_handler.py +0 -0
  104. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_atlas_models.py +0 -0
  105. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_beamline_states.py +0 -0
  106. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_bec_logger.py +0 -0
  107. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_bec_messages.py +0 -0
  108. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_bec_service.py +0 -0
  109. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_callback_handler.py +0 -0
  110. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_channel_monitor.py +0 -0
  111. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_client.py +0 -0
  112. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_config_helper.py +0 -0
  113. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_core_utils.py +0 -0
  114. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_dap_plugins.py +0 -0
  115. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_data_container.py +0 -0
  116. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_device_hashing.py +0 -0
  117. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_device_manager.py +0 -0
  118. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_devices.py +0 -0
  119. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_file_utils.py +0 -0
  120. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_hli_connector_fakeredis.py +0 -0
  121. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_hli_redis_connector.py +0 -0
  122. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_import_utils.py +0 -0
  123. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_jinja_plugins.py +0 -0
  124. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_lmfit_serializer.py +0 -0
  125. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_managed_config_values.py +0 -0
  126. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_managed_redis_connection.py +0 -0
  127. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_messaging_hooks.py +0 -0
  128. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_messaging_service.py +0 -0
  129. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_metadata_schema.py +0 -0
  130. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_observer.py +0 -0
  131. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_pdf_writer.py +0 -0
  132. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_plugin_helper.py +0 -0
  133. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_plugin_manager.py +0 -0
  134. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_plugin_system.py +0 -0
  135. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_pydantic_pretty_print.py +0 -0
  136. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_queue_items.py +0 -0
  137. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_redis_connector_fakeredis.py +0 -0
  138. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_context.py +0 -0
  139. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_data.py +0 -0
  140. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_history.py +0 -0
  141. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_items.py +0 -0
  142. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_manager.py +0 -0
  143. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_object.py +0 -0
  144. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scan_repeat.py +0 -0
  145. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_scibec_validator.py +0 -0
  146. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_script_executor.py +0 -0
  147. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_serializer.py +0 -0
  148. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_signature_serializer.py +0 -0
  149. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_signature_serializer_with_future_import.py +0 -0
  150. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_stream_subs.py +0 -0
  151. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_user_macros.py +0 -0
  152. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_utils.py +0 -0
  153. {bec_lib-3.167.0 → bec_lib-3.167.2}/tests/test_yaml_loader.py +0 -0
  154. {bec_lib-3.167.0 → bec_lib-3.167.2}/util_scripts/init_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: bec_lib
3
- Version: 3.167.0
3
+ Version: 3.167.2
4
4
  Summary: BEC library
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,11 @@ class ScanReport:
238
238
  def conditions_are_met() -> bool:
239
239
  """Check if the conditions are met"""
240
240
  if not self.scan and self.status == "COMPLETED":
241
- # If it is not a scan, just return True when completed
242
- return True
241
+ if not self._request_expects_scan_item():
242
+ return True
243
+ # If the scan item is not available yet, only return for callers
244
+ # that do not need scan-derived completion checks.
245
+ return not num_points and not file_written
243
246
  if num_points and not self._num_points_reached():
244
247
  return False
245
248
  if file_written and not self._file_written():
@@ -259,6 +262,14 @@ class ScanReport:
259
262
  # final poll to ensure all callbacks are processed
260
263
  self._client.callbacks.poll()
261
264
 
265
+ def _request_expects_scan_item(self) -> bool:
266
+ """Return whether the request should eventually have a scan item."""
267
+ queue_item = self.request.queue or self.queue_item
268
+ for request_block in getattr(queue_item, "request_blocks", []) or []:
269
+ if request_block.RID == self.request.requestID:
270
+ return request_block.is_scan
271
+ return True
272
+
262
273
  def _file_written(self) -> bool:
263
274
  """
264
275
  Check if the master file was written
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_lib"
7
- version = "3.167.0"
7
+ version = "3.167.2"
8
8
  description = "BEC library"
9
9
  requires-python = ">=3.11"
10
10
  classifiers = [
@@ -92,6 +92,59 @@ def test_scan_report_wait_for_scan_file_pending(scan_report):
92
92
  assert file_written.call_count == 3
93
93
 
94
94
 
95
+ def test_scan_report_wait_for_non_scan_without_scan_item(scan_report):
96
+ scan_report.request.request = messages.ScanQueueMessage(scan_type="umv", parameter={})
97
+ scan_report.request.requestID = "request-id"
98
+ scan_report.queue_item.status = "COMPLETED"
99
+ scan_report.request.queue.request_blocks = [mock.MagicMock(RID="request-id", is_scan=False)]
100
+
101
+ with (
102
+ mock.patch.object(ScanReport, "scan", new_callable=mock.PropertyMock) as scan,
103
+ mock.patch("time.sleep") as sleep,
104
+ ):
105
+ scan.return_value = None
106
+ scan_report._wait_scan(None, 0.1, num_points=False, file_written=True)
107
+
108
+ sleep.assert_not_called()
109
+
110
+
111
+ def test_scan_report_wait_for_non_scan_uses_cached_queue_item(scan_report):
112
+ scan_report.request.request = messages.ScanQueueMessage(scan_type="umv", parameter={})
113
+ scan_report.request.requestID = "request-id"
114
+ scan_report.queue_item.status = "COMPLETED"
115
+ scan_report.queue_item.request_blocks = [mock.MagicMock(RID="request-id", is_scan=False)]
116
+ scan_report.request.queue = None
117
+
118
+ with (
119
+ mock.patch.object(ScanReport, "scan", new_callable=mock.PropertyMock) as scan,
120
+ mock.patch("time.sleep") as sleep,
121
+ ):
122
+ scan.return_value = None
123
+ scan_report._wait_scan(None, 0.1, num_points=False, file_written=True)
124
+
125
+ sleep.assert_not_called()
126
+
127
+
128
+ def test_scan_report_wait_for_scan_num_points_waits_for_scan_item(scan_report):
129
+ scan_report.request.request = messages.ScanQueueMessage(scan_type="line_scan", parameter={})
130
+ scan_report.queue_item.status = "COMPLETED"
131
+
132
+ missing_scan = None
133
+ incomplete_scan = mock.MagicMock(num_monitored_readouts=3, live_data={"0": "msg"})
134
+ complete_scan = mock.MagicMock(
135
+ num_monitored_readouts=3, live_data={"0": "msg", "1": "msg", "2": "msg"}
136
+ )
137
+
138
+ with (
139
+ mock.patch.object(ScanReport, "scan", new_callable=mock.PropertyMock) as scan,
140
+ mock.patch("time.sleep"),
141
+ ):
142
+ scan.side_effect = [missing_scan, *([incomplete_scan] * 4), *([complete_scan] * 4)]
143
+ scan_report._wait_scan(None, 0.1, num_points=True, file_written=False)
144
+
145
+ assert scan_report._client.callbacks.poll.call_count == 3
146
+
147
+
95
148
  def test_scan_report_wait_for_scan_raises(scan_report):
96
149
  scan_report.request.request = messages.ScanQueueMessage(scan_type="mv", parameter={})
97
150
  with mock.patch.object(scan_report, "_get_mv_status") as get_mv_status:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes