bec-lib 4.4.2__tar.gz → 4.5.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.
- {bec_lib-4.4.2 → bec_lib-4.5.0}/PKG-INFO +1 -1
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/endpoints.py +16 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/messages.py +32 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/pyproject.toml +1 -1
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_bec_messages.py +46 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/.gitignore +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/README.md +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/_print_versions.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/acl_login.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/actors.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/alarm_handler.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/atlas_models.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/bec_errors.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/bec_service.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/bec_yaml_loader.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/bl_state_manager.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/bl_states.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/builtin_actor_hli.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/callback_handler.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/channel_monitor.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/client.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/codecs.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/config_helper.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/config_values.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/configs/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/configs/demo_config.yaml +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/configs/openapi_schema.json +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/connector.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/dap_plugin_objects.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/dap_plugins.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/device.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/devicemanager.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/file_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/live_scan_data.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/lmfit_serializer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/logger.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/macro_update_handler.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/messaging_hooks.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/messaging_services.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/metadata_schema.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/numpy_encoder.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/observer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/path_optimization.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/pdf_writer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/plugin_helper.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/position_generators.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/procedures/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/procedures/helper.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/procedures/hli.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/procedures/status.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/queue_items.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/redis_connector/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/redis_connector/constants.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/redis_connector/hli.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/redis_connector/managed_redis_connection.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/redis_connector/streams.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/redis_connector/validation.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/request_context.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/request_items.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_args.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_data_container.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_history.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_input_validator.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_items.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_manager.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_number_container.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_preview.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_repeat.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scan_report.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scans.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/scibec_validator.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/script_executor.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/serialization.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/serialization_registry.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/service_config.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/signature_serializer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/tests/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/tests/fixtures.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/tests/test_config.yaml +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/tests/test_service_config.yaml +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/tests/utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/user_macros.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/copier_jinja_filters.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/deprecation.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/import_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/json_extended.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/_constants.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/_util.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/create/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/create/device.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/create/scan.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/create/templates/scan.py.jinja +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/plugin_manager/main.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/proxy.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/pydantic_pretty_print.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/rpc_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/scan_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/threading_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/bec_lib/utils/user_acls_test.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/__init__.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/_additional_for_signature_serializer_test.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/conftest.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_acl_login.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_alarm_handler.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_atlas_models.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_beamline_states.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_bec_logger.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_bec_service.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_callback_handler.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_channel_monitor.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_client.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_config_helper.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_core_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_dap_plugins.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_data_container.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_deprecation.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_device_hashing.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_device_manager.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_devices.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_file_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_hli_connector_fakeredis.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_hli_redis_connector.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_import_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_jinja_plugins.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_lmfit_serializer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_managed_config_values.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_managed_redis_connection.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_messaging_hooks.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_messaging_service.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_metadata_schema.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_observer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_path_optimization.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_pdf_writer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_plugin_helper.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_plugin_manager.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_plugin_system.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_position_generators.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_procedure_submission.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_pydantic_pretty_print.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_queue_items.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_redis_connector_fakeredis.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_roi_endpoints.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_roi_messages.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_context.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_data.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_history.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_items.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_manager.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_object.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_preview.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_repeat.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scan_report.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_scibec_validator.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_script_executor.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_serializer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_service_config.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_signature_serializer.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_signature_serializer_with_future_import.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_stream_subs.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_user_macros.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_utils.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/tests/test_yaml_loader.py +0 -0
- {bec_lib-4.4.2 → bec_lib-4.5.0}/util_scripts/init_config.py +0 -0
|
@@ -796,6 +796,22 @@ class MessageEndpoints:
|
|
|
796
796
|
message_op=MessageOp.SET_PUBLISH,
|
|
797
797
|
)
|
|
798
798
|
|
|
799
|
+
@staticmethod
|
|
800
|
+
def scan_hook() -> EndpointInfo:
|
|
801
|
+
"""Endpoint for the latest scan hook or instruction update of the running scan.
|
|
802
|
+
|
|
803
|
+
Step changes are published at once, instruction updates at most once per 0.1 second
|
|
804
|
+
window. The latest update is stored, so clients that start mid-scan can read it.
|
|
805
|
+
|
|
806
|
+
Returns:
|
|
807
|
+
EndpointInfo: Endpoint carrying messages.ScanHookMessage updates.
|
|
808
|
+
"""
|
|
809
|
+
return EndpointInfo(
|
|
810
|
+
endpoint=f"{EndpointType.INFO.value}/scans/scan_hook",
|
|
811
|
+
message_type=messages.ScanHookMessage,
|
|
812
|
+
message_op=MessageOp.SET_PUBLISH,
|
|
813
|
+
)
|
|
814
|
+
|
|
799
815
|
@staticmethod
|
|
800
816
|
def scan_progress():
|
|
801
817
|
"""
|
|
@@ -763,6 +763,38 @@ class DeviceInstructionMessage(BECMessage):
|
|
|
763
763
|
parameter: dict
|
|
764
764
|
|
|
765
765
|
|
|
766
|
+
class ScanHookMessage(BECMessage):
|
|
767
|
+
"""A scan lifecycle event, optionally including dispatched device instructions.
|
|
768
|
+
|
|
769
|
+
Args:
|
|
770
|
+
scan_id (str): Scan whose lifecycle is being reported.
|
|
771
|
+
hook (str | None): Active lifecycle hook, or None before a hook has started.
|
|
772
|
+
status (Literal["running", "completed", "interrupted", "error"]): Hook execution state.
|
|
773
|
+
"interrupted" means the step was ended by a user or alarm interruption of the scan
|
|
774
|
+
(finish now, abort or halt); "error" is used for any other exception.
|
|
775
|
+
instructions (list[DeviceInstructionMessage]): Instructions dispatched in this hook.
|
|
776
|
+
Instruction updates are coalesced to the latest one in each 0.1 second window;
|
|
777
|
+
the start, completion or failure of a top-level step is sent at once.
|
|
778
|
+
waiting (bool): Whether this update was recorded during a device or exposure wait.
|
|
779
|
+
Wait updates include only pending instructions. The next hook or instruction update
|
|
780
|
+
replaces the wait; no separate update is emitted when waiting ends.
|
|
781
|
+
wait_started_at (float | None): Start time of the reported wait, or None for other updates.
|
|
782
|
+
hook_started_at (float | None): Start time of the current top-level step, e.g. scan_core,
|
|
783
|
+
or None outside a step.
|
|
784
|
+
timestamp (float): Time at which the lifecycle or instruction event was recorded.
|
|
785
|
+
"""
|
|
786
|
+
|
|
787
|
+
msg_type: ClassVar[str] = "scan_hook"
|
|
788
|
+
scan_id: str
|
|
789
|
+
hook: str | None
|
|
790
|
+
status: Literal["running", "completed", "interrupted", "error"] = "running"
|
|
791
|
+
instructions: list[DeviceInstructionMessage] = Field(default_factory=list)
|
|
792
|
+
timestamp: float = Field(default_factory=time.time)
|
|
793
|
+
waiting: bool = False
|
|
794
|
+
wait_started_at: float | None = None
|
|
795
|
+
hook_started_at: float | None = None
|
|
796
|
+
|
|
797
|
+
|
|
766
798
|
class ErrorInfo(BaseModel):
|
|
767
799
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
768
800
|
error_message: str
|
|
@@ -1124,3 +1124,49 @@ def test_feedback_message():
|
|
|
1124
1124
|
assert res_loaded == msg
|
|
1125
1125
|
assert res_loaded.username == getpass.getuser()
|
|
1126
1126
|
assert res_loaded.versions == messages.ServiceVersions._get_version_numbers()
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
def test_scan_hook_message_roundtrip():
|
|
1130
|
+
instruction = messages.DeviceInstructionMessage(
|
|
1131
|
+
device="samx", action="set", parameter={"value": 2}, metadata={"device_instr_id": "move"}
|
|
1132
|
+
)
|
|
1133
|
+
msg = messages.ScanHookMessage(
|
|
1134
|
+
scan_id="scan-id",
|
|
1135
|
+
hook="pre_scan",
|
|
1136
|
+
instructions=[instruction],
|
|
1137
|
+
metadata={"RID": "request-id", "queue_id": "queue-id"},
|
|
1138
|
+
)
|
|
1139
|
+
loaded = MsgpackSerialization.loads(MsgpackSerialization.dumps(msg))
|
|
1140
|
+
assert loaded == msg
|
|
1141
|
+
assert isinstance(loaded.instructions[0], messages.DeviceInstructionMessage)
|
|
1142
|
+
assert messages.ScanHookMessage(scan_id="scan-id", hook="stage").instructions == []
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
def test_scan_hook_wait_fields_are_optional_and_roundtrip():
|
|
1146
|
+
old_update = messages.ScanHookMessage.model_validate(
|
|
1147
|
+
{"scan_id": "scan-id", "hook": "at_each_point", "status": "running", "instructions": []}
|
|
1148
|
+
)
|
|
1149
|
+
assert old_update.waiting is False
|
|
1150
|
+
assert old_update.wait_started_at is None
|
|
1151
|
+
assert old_update.hook_started_at is None
|
|
1152
|
+
waiting = old_update.model_copy(update={"waiting": True, "wait_started_at": 1791244800.0})
|
|
1153
|
+
loaded = MsgpackSerialization.loads(MsgpackSerialization.dumps(waiting))
|
|
1154
|
+
assert loaded == waiting
|
|
1155
|
+
assert loaded.waiting is True
|
|
1156
|
+
assert loaded.wait_started_at == 1791244800.0
|
|
1157
|
+
|
|
1158
|
+
|
|
1159
|
+
def test_scan_hook_step_start_roundtrips():
|
|
1160
|
+
msg = messages.ScanHookMessage(
|
|
1161
|
+
scan_id="scan-id", hook="scan_core", status="error", hook_started_at=1791244800.0
|
|
1162
|
+
)
|
|
1163
|
+
loaded = MsgpackSerialization.loads(MsgpackSerialization.dumps(msg))
|
|
1164
|
+
assert loaded == msg
|
|
1165
|
+
assert loaded.hook_started_at == 1791244800.0
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
def test_scan_hook_interrupted_status_roundtrips():
|
|
1169
|
+
msg = messages.ScanHookMessage(scan_id="scan-id", hook="scan_core", status="interrupted")
|
|
1170
|
+
loaded = MsgpackSerialization.loads(MsgpackSerialization.dumps(msg))
|
|
1171
|
+
assert loaded == msg
|
|
1172
|
+
assert loaded.status == "interrupted"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|