bec-lib 3.146.2__tar.gz → 3.147.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 (155) hide show
  1. {bec_lib-3.146.2 → bec_lib-3.147.0}/PKG-INFO +1 -1
  2. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/endpoints.py +25 -0
  3. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/messages.py +30 -0
  4. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/tests/utils.py +2 -2
  5. {bec_lib-3.146.2 → bec_lib-3.147.0}/pyproject.toml +2 -1
  6. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_bec_messages.py +15 -0
  7. {bec_lib-3.146.2 → bec_lib-3.147.0}/.gitignore +0 -0
  8. {bec_lib-3.146.2 → bec_lib-3.147.0}/README.md +0 -0
  9. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/__init__.py +0 -0
  10. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/_print_versions.py +0 -0
  11. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/acl_login.py +0 -0
  12. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/actors.py +0 -0
  13. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/alarm_handler.py +0 -0
  14. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/atlas_models.py +0 -0
  15. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/bec_errors.py +0 -0
  16. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/bec_service.py +0 -0
  17. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/bec_yaml_loader.py +0 -0
  18. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/bl_state_manager.py +0 -0
  19. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/bl_states.py +0 -0
  20. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/builtin_actor_hli.py +0 -0
  21. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/callback_handler.py +0 -0
  22. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/channel_monitor.py +0 -0
  23. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/client.py +0 -0
  24. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/codecs.py +0 -0
  25. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/config_helper.py +0 -0
  26. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/config_values.py +0 -0
  27. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/configs/__init__.py +0 -0
  28. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/configs/demo_config.yaml +0 -0
  29. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/configs/openapi_schema.json +0 -0
  30. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/connector.py +0 -0
  31. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/dap_plugin_objects.py +0 -0
  32. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/dap_plugins.py +0 -0
  33. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/device.py +0 -0
  34. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/device_monitor_plugin.py +0 -0
  35. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/devicemanager.py +0 -0
  36. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/file_utils.py +0 -0
  37. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/live_scan_data.py +0 -0
  38. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/lmfit_serializer.py +0 -0
  39. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/logger.py +0 -0
  40. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/macro_update_handler.py +0 -0
  41. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/messaging_hooks.py +0 -0
  42. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/messaging_services.py +0 -0
  43. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/metadata_schema.py +0 -0
  44. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/numpy_encoder.py +0 -0
  45. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/observer.py +0 -0
  46. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/pdf_writer.py +0 -0
  47. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/plugin_helper.py +0 -0
  48. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/procedures/__init__.py +0 -0
  49. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/procedures/helper.py +0 -0
  50. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/procedures/hli.py +0 -0
  51. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/procedures/status.py +0 -0
  52. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/queue_items.py +0 -0
  53. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/redis_connector/__init__.py +0 -0
  54. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/redis_connector/constants.py +0 -0
  55. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/redis_connector/hli.py +0 -0
  56. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/redis_connector/managed_redis_connection.py +0 -0
  57. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/redis_connector/streams.py +0 -0
  58. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/redis_connector/validation.py +0 -0
  59. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/request_context.py +0 -0
  60. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/request_items.py +0 -0
  61. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_args.py +0 -0
  62. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_data_container.py +0 -0
  63. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_history.py +0 -0
  64. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_input_validator.py +0 -0
  65. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_items.py +0 -0
  66. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_manager.py +0 -0
  67. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_number_container.py +0 -0
  68. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_repeat.py +0 -0
  69. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scan_report.py +0 -0
  70. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scans.py +0 -0
  71. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/scibec_validator.py +0 -0
  72. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/script_executor.py +0 -0
  73. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/serialization.py +0 -0
  74. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/serialization_registry.py +0 -0
  75. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/service_config.py +0 -0
  76. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/signature_serializer.py +0 -0
  77. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/tests/__init__.py +0 -0
  78. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/tests/fixtures.py +0 -0
  79. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/tests/test_config.yaml +0 -0
  80. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/tests/test_service_config.yaml +0 -0
  81. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/user_macros.py +0 -0
  82. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/__init__.py +0 -0
  83. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/copier_jinja_filters.py +0 -0
  84. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/import_utils.py +0 -0
  85. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/json_extended.py +0 -0
  86. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/__init__.py +0 -0
  87. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/_constants.py +0 -0
  88. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/_util.py +0 -0
  89. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/create/__init__.py +0 -0
  90. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/create/device.py +0 -0
  91. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/create/scan.py +0 -0
  92. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/create/templates/v4_scan.py.jinja +0 -0
  93. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/plugin_manager/main.py +0 -0
  94. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/proxy.py +0 -0
  95. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/pydantic_pretty_print.py +0 -0
  96. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/rpc_utils.py +0 -0
  97. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/scan_utils.py +0 -0
  98. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/threading_utils.py +0 -0
  99. {bec_lib-3.146.2 → bec_lib-3.147.0}/bec_lib/utils/user_acls_test.py +0 -0
  100. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/__init__.py +0 -0
  101. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/_additional_for_signature_serializer_test.py +0 -0
  102. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/conftest.py +0 -0
  103. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_acl_login.py +0 -0
  104. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_alarm_handler.py +0 -0
  105. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_atlas_models.py +0 -0
  106. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_beamline_states.py +0 -0
  107. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_bec_logger.py +0 -0
  108. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_bec_service.py +0 -0
  109. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_callback_handler.py +0 -0
  110. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_channel_monitor.py +0 -0
  111. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_client.py +0 -0
  112. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_config_helper.py +0 -0
  113. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_core_utils.py +0 -0
  114. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_dap_plugins.py +0 -0
  115. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_data_container.py +0 -0
  116. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_device_hashing.py +0 -0
  117. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_device_manager.py +0 -0
  118. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_devices.py +0 -0
  119. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_file_utils.py +0 -0
  120. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_hli_connector_fakeredis.py +0 -0
  121. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_hli_redis_connector.py +0 -0
  122. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_import_utils.py +0 -0
  123. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_jinja_plugins.py +0 -0
  124. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_lmfit_serializer.py +0 -0
  125. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_managed_config_values.py +0 -0
  126. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_managed_redis_connection.py +0 -0
  127. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_messaging_hooks.py +0 -0
  128. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_messaging_service.py +0 -0
  129. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_metadata_schema.py +0 -0
  130. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_observer.py +0 -0
  131. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_pdf_writer.py +0 -0
  132. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_plugin_helper.py +0 -0
  133. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_plugin_manager.py +0 -0
  134. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_plugin_system.py +0 -0
  135. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_pydantic_pretty_print.py +0 -0
  136. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_queue_items.py +0 -0
  137. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_redis_connector_fakeredis.py +0 -0
  138. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_context.py +0 -0
  139. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_data.py +0 -0
  140. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_history.py +0 -0
  141. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_items.py +0 -0
  142. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_manager.py +0 -0
  143. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_object.py +0 -0
  144. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_repeat.py +0 -0
  145. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scan_report.py +0 -0
  146. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_scibec_validator.py +0 -0
  147. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_script_executor.py +0 -0
  148. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_serializer.py +0 -0
  149. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_signature_serializer.py +0 -0
  150. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_signature_serializer_with_future_import.py +0 -0
  151. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_stream_subs.py +0 -0
  152. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_user_macros.py +0 -0
  153. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_utils.py +0 -0
  154. {bec_lib-3.146.2 → bec_lib-3.147.0}/tests/test_yaml_loader.py +0 -0
  155. {bec_lib-3.146.2 → bec_lib-3.147.0}/util_scripts/init_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_lib
3
- Version: 3.146.2
3
+ Version: 3.147.0
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
@@ -424,6 +424,31 @@ class MessageEndpoints:
424
424
  endpoint=endpoint, message_type=messages.DeviceMessage, message_op=MessageOp.STREAM
425
425
  )
426
426
 
427
+ @staticmethod
428
+ def device_async_signal_index(scan_id: str, device: str, signal: str):
429
+ """
430
+ Endpoint for async device signal index updates.
431
+ This endpoint is used by the device server to publish per-message index
432
+ information for async signals using a messages.DeviceAsyncSignalIndexMessage
433
+ message. Index data is scoped to the async signal stream.
434
+
435
+ Args:
436
+ scan_id (str): unique scan identifier
437
+ device (str): Device name, e.g. "mcs".
438
+ signal (str): Signal name, e.g. "image".
439
+
440
+ Returns:
441
+ EndpointInfo: Endpoint for device async signal index updates.
442
+ """
443
+ endpoint = (
444
+ f"{EndpointType.INFO.value}/devices/async_signal_index/{scan_id}/{device}/{signal}"
445
+ )
446
+ return EndpointInfo(
447
+ endpoint=endpoint,
448
+ message_type=messages.DeviceAsyncSignalIndexMessage,
449
+ message_op=MessageOp.LIST,
450
+ )
451
+
427
452
  @staticmethod
428
453
  def device_monitor_2d(device: str):
429
454
  """
@@ -689,6 +689,36 @@ class DeviceMessage(BECMessage):
689
689
  return v
690
690
 
691
691
 
692
+ class DeviceAsyncSignalIndexMessage(BECMessage):
693
+ """Message type for sending device async signal index information from the device server
694
+
695
+ This message is used to send index information for async signals emitted by the device server. It is published to a
696
+ separate Redis list and is meant as a companion message to the DeviceMessage that contains the async signal data.
697
+ The DeviceAsyncSignalIndexMessage contains information about the shapes of the async signals
698
+ that are being emitted and can be used to keep track of offsets, even after the raw data stream has already been
699
+ evicted from Redis. The indices are managed on the device server side and are incremented for each new async signal emitted.
700
+
701
+ Args:
702
+ scan_id (str): Unique scan ID
703
+ device (str): Name of the device emitting the async signals
704
+ signal (str): Name of the async signal being emitted
705
+ shapes (dict[str, list[int]]): Dictionary containing the shapes of the async signals being emitted, keyed by signal name
706
+ indices (dict[str, int]): Dictionary containing the current indices of the async signals being emitted, keyed by signal name.
707
+ The index starts at 0 and is incremented for each new async signal emitted and can be used to
708
+ keep track of offsets in the raw data stream.
709
+ async_update (DeviceAsyncUpdate): Metadata controlling how data is aggregated into datasets during a scan. See DeviceAsyncUpdate for details.
710
+ """
711
+
712
+ msg_type: ClassVar[str] = "device_async_signal_index"
713
+
714
+ scan_id: str
715
+ device: str
716
+ signal: str
717
+ shapes: dict[str, list[int]]
718
+ indices: dict[str, int]
719
+ async_update: DeviceAsyncUpdate
720
+
721
+
692
722
  class DeviceAsyncUpdate(BaseModel):
693
723
  """Model for validating async update metadata sent with device data.
694
724
 
@@ -583,9 +583,9 @@ class ConnectorMock(RedisConnector): # pragma: no cover
583
583
  pipe._pipe_buffer.append(("lpush", (topic, msg), {}))
584
584
  return
585
585
 
586
- def rpush(self, topic, msg, pipe=None):
586
+ def rpush(self, topic, msg, pipe=None, expire: int = None):
587
587
  if pipe:
588
- pipe._pipe_buffer.append(("rpush", (topic, msg), {}))
588
+ pipe._pipe_buffer.append(("rpush", (topic, msg), {"expire": expire}))
589
589
  return
590
590
  pass
591
591
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_lib"
7
- version = "3.146.2"
7
+ version = "3.147.0"
8
8
  description = "BEC library"
9
9
  requires-python = ">=3.11"
10
10
  classifiers = [
@@ -94,6 +94,7 @@ Homepage = "https://github.com/bec-project/bec"
94
94
 
95
95
 
96
96
 
97
+
97
98
 
98
99
 
99
100
  [tool.hatch.build.targets.wheel]
@@ -62,6 +62,21 @@ def test_device_message_with_invalid_async_update():
62
62
  )
63
63
 
64
64
 
65
+ def test_device_async_signal_index_message():
66
+ msg = messages.DeviceAsyncSignalIndexMessage(
67
+ scan_id="scan-1",
68
+ device="waveform",
69
+ signal="waveform_data",
70
+ shapes={"waveform_a": [2], "waveform_b": []},
71
+ indices={"waveform_a": 0, "waveform_b": 3},
72
+ async_update=messages.DeviceAsyncUpdate(type="add", max_shape=[None]),
73
+ )
74
+ res = MsgpackSerialization.dumps(msg)
75
+ res_loaded = MsgpackSerialization.loads(res)
76
+
77
+ assert res_loaded == msg
78
+
79
+
65
80
  def test_bundled_message():
66
81
  sub_msg = messages.DeviceMessage(signals={"samx": {"value": 5.2}}, metadata={"RID": "1234"})
67
82
  msg = messages.BundleMessage()
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