bec-server 2.12.0__tar.gz → 2.12.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 (114) hide show
  1. {bec_server-2.12.0 → bec_server-2.12.2}/PKG-INFO +1 -1
  2. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/cli/launch.py +3 -1
  3. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/dap_server.py +3 -1
  4. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/dap_service.py +2 -2
  5. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/dap_service_manager.py +4 -1
  6. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/lmfit1d_service.py +4 -1
  7. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/__init__.py +1 -1
  8. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/cli/launch.py +3 -1
  9. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/device_server.py +5 -1
  10. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/devices/config_update_handler.py +4 -1
  11. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/devices/devicemanager.py +7 -10
  12. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/rpc_mixin.py +4 -1
  13. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/cli/launch.py +3 -1
  14. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/default_writer.py +1 -1
  15. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/file_writer.py +3 -1
  16. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/file_writer_manager.py +14 -17
  17. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer_plugins/cSAXS.py +1 -1
  18. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/bec_emitter.py +3 -1
  19. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/bluesky_emitter.py +2 -1
  20. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/cli/launch.py +3 -1
  21. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/scan_bundler.py +6 -2
  22. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/cli/launch.py +3 -1
  23. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/device_validation.py +4 -1
  24. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_assembler.py +2 -1
  25. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_guard.py +3 -1
  26. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_manager.py +3 -1
  27. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_plugins/otf_scan.py +1 -1
  28. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_queue.py +67 -64
  29. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_server.py +8 -4
  30. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_stubs.py +4 -1
  31. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_worker.py +5 -1
  32. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scans.py +3 -1
  33. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/tests/utils.py +1 -1
  34. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/cli/launch.py +3 -1
  35. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scibec/config_handler.py +5 -3
  36. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scibec/scibec_connector.py +3 -1
  37. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scibec/scibec_metadata_handler.py +3 -1
  38. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scihub.py +4 -2
  39. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scilog/scilog.py +4 -1
  40. {bec_server-2.12.0 → bec_server-2.12.2}/pyproject.toml +1 -1
  41. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_data_processing/conftest.py +1 -1
  42. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_data_processing/test_dap_server.py +1 -1
  43. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/conftest.py +1 -1
  44. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/test_device_manager_ds.py +2 -2
  45. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/test_device_server.py +4 -1
  46. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/test_rpc_mixin.py +3 -1
  47. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_file_writer/conftest.py +1 -1
  48. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_file_writer/test_file_writer_manager.py +3 -1
  49. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_bundler/conftest.py +3 -1
  50. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_bundler/test_bec_emitter.py +2 -1
  51. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_bundler/test_bluesky_emitter.py +1 -1
  52. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_bundler/test_scan_bundler.py +2 -1
  53. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/conftest.py +1 -1
  54. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_scan_guard.py +2 -1
  55. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_scan_server_queue.py +3 -1
  56. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_scan_stubs.py +2 -1
  57. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_scan_worker.py +2 -1
  58. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/conftest.py +1 -1
  59. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/test_scibec_config_handler.py +2 -2
  60. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/test_scibec_connector.py +3 -1
  61. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/test_scilog_connector.py +2 -1
  62. {bec_server-2.12.0 → bec_server-2.12.2}/.gitignore +0 -0
  63. {bec_server-2.12.0 → bec_server-2.12.2}/README.md +0 -0
  64. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/__init__.py +0 -0
  65. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/bec_server_utils/__init__.py +0 -0
  66. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/bec_server_utils/launch.py +0 -0
  67. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/bec_server_utils/service_handler.py +0 -0
  68. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/bec_server_utils/subprocess_launch.py +0 -0
  69. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/bec_server_utils/tmux_launch.py +0 -0
  70. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/__init__.py +0 -0
  71. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/data_processing/cli/__init__.py +0 -0
  72. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/cli/__init__.py +0 -0
  73. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/devices/__init__.py +0 -0
  74. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/devices/device_serializer.py +0 -0
  75. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/tests/__init__.py +0 -0
  76. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/device_server/tests/utils.py +0 -0
  77. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/__init__.py +0 -0
  78. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/cli/__init__.py +0 -0
  79. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer/merged_dicts.py +0 -0
  80. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/file_writer_plugins/__init__.py +0 -0
  81. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/__init__.py +0 -0
  82. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/cli/__init__.py +0 -0
  83. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_bundler/emitter.py +0 -0
  84. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/__init__.py +0 -0
  85. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/cli/__init__.py +0 -0
  86. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/errors.py +0 -0
  87. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/path_optimization.py +0 -0
  88. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/scan_plugins/__init__.py +0 -0
  89. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/tests/__init__.py +0 -0
  90. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scan_server/tests/fixtures.py +0 -0
  91. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/__init__.py +0 -0
  92. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/cli/__init__.py +0 -0
  93. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/repeated_timer.py +0 -0
  94. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scibec/__init__.py +0 -0
  95. {bec_server-2.12.0 → bec_server-2.12.2}/bec_server/scihub/scilog/__init__.py +0 -0
  96. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_bec_server_utils/test_main.py +0 -0
  97. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_bec_server_utils/test_service_handler.py +0 -0
  98. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_bec_server_utils/test_tmux_launch.py +0 -0
  99. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_data_processing/test_dap_cli_launch.py +0 -0
  100. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_data_processing/test_dap_service_manager.py +0 -0
  101. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_data_processing/test_lmfit1d_service.py +0 -0
  102. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/test_config_handler.py +0 -0
  103. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/test_device_serializer.py +0 -0
  104. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_device_server/test_device_server_cli_launch.py +0 -0
  105. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_file_writer/test_file_writer.py +0 -0
  106. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_file_writer/test_file_writer_cli_launch.py +0 -0
  107. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_bundler/test_emitter.py +0 -0
  108. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_bundler/test_scan_bundler_cli_launch.py +0 -0
  109. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_path_optimization.py +0 -0
  110. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_scan_server_cli_launch.py +0 -0
  111. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scan_server/test_scans.py +0 -0
  112. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/test_repeated_timer.py +0 -0
  113. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/test_scibec_metadata_handler.py +0 -0
  114. {bec_server-2.12.0 → bec_server-2.12.2}/tests/tests_scihub/test_scihub_cli_launch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec-server
3
- Version: 2.12.0
3
+ Version: 2.12.2
4
4
  Summary: BEC server
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec
@@ -5,7 +5,9 @@ import argparse
5
5
  import threading
6
6
 
7
7
  import bec_server.data_processing as data_processing
8
- from bec_lib import RedisConnector, ServiceConfig, bec_logger
8
+ from bec_lib.logger import bec_logger
9
+ from bec_lib.redis_connector import RedisConnector
10
+ from bec_lib.service_config import ServiceConfig
9
11
  from bec_server.data_processing.lmfit1d_service import LmfitService1D
10
12
 
11
13
  logger = bec_logger.logger
@@ -1,5 +1,7 @@
1
- from bec_lib import BECClient, ServiceConfig, bec_logger
1
+ from bec_lib.client import BECClient
2
2
  from bec_lib.connector import ConnectorBase
3
+ from bec_lib.logger import bec_logger
4
+ from bec_lib.service_config import ServiceConfig
3
5
 
4
6
  from .dap_service_manager import DAPServiceManager
5
7
 
@@ -4,11 +4,11 @@ import abc
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  # import numpy as np
7
- from bec_lib import bec_logger
7
+ from bec_lib.logger import bec_logger
8
8
  from bec_lib.signature_serializer import signature_to_dict
9
9
 
10
10
  if TYPE_CHECKING:
11
- from bec_lib import BECClient
11
+ from bec_lib.client import BECClient
12
12
 
13
13
 
14
14
  logger = bec_logger.logger
@@ -1,6 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from bec_lib import BECClient, MessageEndpoints, bec_logger, messages
3
+ from bec_lib import messages
4
+ from bec_lib.client import BECClient
5
+ from bec_lib.endpoints import MessageEndpoints
6
+ from bec_lib.logger import bec_logger
4
7
  from bec_lib.redis_connector import MessageObject
5
8
 
6
9
  logger = bec_logger.logger
@@ -8,8 +8,11 @@ from typing import TYPE_CHECKING
8
8
  import lmfit
9
9
  import numpy as np
10
10
 
11
- from bec_lib import DeviceBase, MessageEndpoints, bec_logger, messages
11
+ from bec_lib import messages
12
+ from bec_lib.device import DeviceBase
13
+ from bec_lib.endpoints import MessageEndpoints
12
14
  from bec_lib.lmfit_serializer import deserialize_param_object, serialize_lmfit_params
15
+ from bec_lib.logger import bec_logger
13
16
  from bec_lib.serialization import MsgpackSerialization
14
17
  from bec_server.data_processing.dap_service import DAPError, DAPServiceBase
15
18
 
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
 
3
- from bec_lib import DeviceManagerBase
3
+ from bec_lib.devicemanager import DeviceManagerBase
4
4
 
5
5
  from . import devices
6
6
  from .cli.launch import main
@@ -16,7 +16,9 @@ for entry_point in entry_points:
16
16
  import argparse
17
17
  import threading
18
18
 
19
- from bec_lib import RedisConnector, ServiceConfig, bec_logger
19
+ from bec_lib.logger import bec_logger
20
+ from bec_lib.redis_connector import RedisConnector
21
+ from bec_lib.service_config import ServiceConfig
20
22
  from bec_server import device_server
21
23
 
22
24
  logger = bec_logger.logger
@@ -8,9 +8,13 @@ import ophyd
8
8
  from ophyd import Kind, OphydObject, Staged
9
9
  from ophyd.utils import errors as ophyd_errors
10
10
 
11
- from bec_lib import Alarms, BECService, MessageEndpoints, bec_logger, messages
11
+ from bec_lib import messages
12
+ from bec_lib.alarm_handler import Alarms
13
+ from bec_lib.bec_service import BECService
12
14
  from bec_lib.connector import ConnectorBase
13
15
  from bec_lib.device import OnFailure
16
+ from bec_lib.endpoints import MessageEndpoints
17
+ from bec_lib.logger import bec_logger
14
18
  from bec_lib.messages import BECStatus
15
19
  from bec_server.device_server.devices.devicemanager import DeviceManagerDS
16
20
  from bec_server.device_server.rpc_mixin import RPCMixin
@@ -4,7 +4,10 @@ import copy
4
4
  import traceback
5
5
  from typing import TYPE_CHECKING
6
6
 
7
- from bec_lib import DeviceConfigError, MessageEndpoints, bec_logger, messages
7
+ from bec_lib import messages
8
+ from bec_lib.devicemanager import DeviceConfigError
9
+ from bec_lib.endpoints import MessageEndpoints
10
+ from bec_lib.logger import bec_logger
8
11
 
9
12
  if TYPE_CHECKING:
10
13
  from devicemanager import DeviceManagerDS
@@ -18,16 +18,13 @@ from ophyd.ophydobj import OphydObject
18
18
  from ophyd.signal import EpicsSignalBase
19
19
  from typeguard import typechecked
20
20
 
21
- from bec_lib import (
22
- BECService,
23
- DeviceBase,
24
- DeviceConfigError,
25
- DeviceManagerBase,
26
- MessageEndpoints,
27
- bec_logger,
28
- messages,
29
- plugin_helper,
30
- )
21
+ from bec_lib import messages, plugin_helper
22
+ from bec_lib.bec_errors import DeviceConfigError
23
+ from bec_lib.bec_service import BECService
24
+ from bec_lib.device import DeviceBase
25
+ from bec_lib.devicemanager import DeviceManagerBase
26
+ from bec_lib.endpoints import MessageEndpoints
27
+ from bec_lib.logger import bec_logger
31
28
  from bec_server.device_server.devices.config_update_handler import ConfigUpdateHandler
32
29
  from bec_server.device_server.devices.device_serializer import get_device_info
33
30
 
@@ -5,7 +5,10 @@ from typing import Any
5
5
 
6
6
  import ophyd
7
7
 
8
- from bec_lib import Alarms, MessageEndpoints, bec_logger, messages
8
+ from bec_lib import messages
9
+ from bec_lib.alarm_handler import Alarms
10
+ from bec_lib.endpoints import MessageEndpoints
11
+ from bec_lib.logger import bec_logger
9
12
  from bec_server.device_server.devices import is_serializable, rgetattr
10
13
 
11
14
  logger = bec_logger.logger
@@ -4,7 +4,9 @@ import argparse
4
4
  import os
5
5
  import threading
6
6
 
7
- from bec_lib import RedisConnector, ServiceConfig, bec_logger
7
+ from bec_lib.logger import bec_logger
8
+ from bec_lib.redis_connector import RedisConnector
9
+ from bec_lib.service_config import ServiceConfig
8
10
  from bec_server import file_writer
9
11
 
10
12
  logger = bec_logger.logger
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING
4
4
 
5
5
  if TYPE_CHECKING:
6
- from bec_lib import DeviceManagerBase
6
+ from bec_lib.devicemanager import DeviceManagerBase
7
7
  from bec_server.file_writer.file_writer import HDF5Storage
8
8
 
9
9
 
@@ -9,7 +9,9 @@ import typing
9
9
 
10
10
  import h5py
11
11
 
12
- from bec_lib import MessageEndpoints, bec_logger, messages, plugin_helper
12
+ from bec_lib import messages, plugin_helper
13
+ from bec_lib.endpoints import MessageEndpoints
14
+ from bec_lib.logger import bec_logger
13
15
 
14
16
  from .default_writer import NeXus_format as default_NeXus_format
15
17
  from .merged_dicts import merge_dicts
@@ -3,19 +3,16 @@ from __future__ import annotations
3
3
  import threading
4
4
  import traceback
5
5
 
6
- from bec_lib import (
7
- BECService,
8
- DeviceManagerBase,
9
- MessageEndpoints,
10
- ServiceConfig,
11
- bec_logger,
12
- messages,
13
- threadlocked,
14
- )
6
+ from bec_lib import messages
15
7
  from bec_lib.alarm_handler import Alarms
16
8
  from bec_lib.async_data import AsyncDataHandler
9
+ from bec_lib.bec_service import BECService
10
+ from bec_lib.devicemanager import DeviceManagerBase
11
+ from bec_lib.endpoints import MessageEndpoints
17
12
  from bec_lib.file_utils import FileWriter
13
+ from bec_lib.logger import bec_logger
18
14
  from bec_lib.redis_connector import MessageObject, RedisConnector
15
+ from bec_lib.service_config import ServiceConfig
19
16
  from bec_server.file_writer.file_writer import NexusFileWriter
20
17
 
21
18
  logger = bec_logger.logger
@@ -254,7 +251,6 @@ class FileWriterManager(BECService):
254
251
  msgs
255
252
  )
256
253
 
257
- @threadlocked
258
254
  def check_storage_status(self, scan_id: str) -> None:
259
255
  """
260
256
  Check if the scan storage is ready to be written to file and write it if it is.
@@ -262,13 +258,14 @@ class FileWriterManager(BECService):
262
258
  Args:
263
259
  scan_id (str): Scan ID
264
260
  """
265
- if not self.scan_storage.get(scan_id):
266
- return
267
- self.update_baseline_reading(scan_id)
268
- self.update_file_references(scan_id)
269
- if self.scan_storage[scan_id].ready_to_write():
270
- self.update_async_data(scan_id)
271
- self.write_file(scan_id)
261
+ with self._lock:
262
+ if not self.scan_storage.get(scan_id):
263
+ return
264
+ self.update_baseline_reading(scan_id)
265
+ self.update_file_references(scan_id)
266
+ if self.scan_storage[scan_id].ready_to_write():
267
+ self.update_async_data(scan_id)
268
+ self.write_file(scan_id)
272
269
 
273
270
  def write_file(self, scan_id: str) -> None:
274
271
  """
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Any
5
5
  import numpy as np
6
6
 
7
7
  if TYPE_CHECKING:
8
- from bec_lib import DeviceManagerBase
8
+ from bec_lib.devicemanager import DeviceManagerBase
9
9
  from bec_server.file_writer.file_writer import HDF5Storage
10
10
 
11
11
 
@@ -2,7 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
- from bec_lib import MessageEndpoints, bec_logger, messages
5
+ from bec_lib import messages
6
+ from bec_lib.endpoints import MessageEndpoints
7
+ from bec_lib.logger import bec_logger
6
8
 
7
9
  from .emitter import EmitterBase
8
10
 
@@ -6,7 +6,8 @@ from typing import TYPE_CHECKING
6
6
 
7
7
  import msgpack
8
8
 
9
- from bec_lib import MessageEndpoints, bec_logger
9
+ from bec_lib.endpoints import MessageEndpoints
10
+ from bec_lib.logger import bec_logger
10
11
 
11
12
  from .emitter import EmitterBase
12
13
 
@@ -4,7 +4,9 @@
4
4
  import argparse
5
5
  import threading
6
6
 
7
- from bec_lib import RedisConnector, ServiceConfig, bec_logger
7
+ from bec_lib.logger import bec_logger
8
+ from bec_lib.redis_connector import RedisConnector
9
+ from bec_lib.service_config import ServiceConfig
8
10
  from bec_server import scan_bundler
9
11
 
10
12
  logger = bec_logger.logger
@@ -5,8 +5,12 @@ import traceback
5
5
  from collections.abc import Callable
6
6
  from concurrent.futures import ThreadPoolExecutor
7
7
 
8
- from bec_lib import BECService, BECStatus, DeviceManagerBase, MessageEndpoints, bec_logger, messages
8
+ from bec_lib import messages
9
+ from bec_lib.bec_service import BECService
9
10
  from bec_lib.connector import ConnectorBase
11
+ from bec_lib.devicemanager import DeviceManagerBase
12
+ from bec_lib.endpoints import MessageEndpoints
13
+ from bec_lib.logger import bec_logger
10
14
 
11
15
  from .bec_emitter import BECEmitter
12
16
  from .bluesky_emitter import BlueskyEmitter
@@ -52,7 +56,7 @@ class ScanBundler(BECService):
52
56
  self._lock = threading.Lock()
53
57
  self._emitter = []
54
58
  self._initialize_emitters()
55
- self.status = BECStatus.RUNNING
59
+ self.status = messages.BECStatus.RUNNING
56
60
 
57
61
  def _initialize_emitters(self):
58
62
  self._emitter = [BECEmitter(self), BlueskyEmitter(self)]
@@ -4,7 +4,9 @@
4
4
  import argparse
5
5
  import threading
6
6
 
7
- from bec_lib import RedisConnector, ServiceConfig, bec_logger
7
+ from bec_lib.logger import bec_logger
8
+ from bec_lib.redis_connector import RedisConnector
9
+ from bec_lib.service_config import ServiceConfig
8
10
  from bec_server import scan_server
9
11
 
10
12
  logger = bec_logger.logger
@@ -1,6 +1,9 @@
1
1
  from collections.abc import Callable
2
2
 
3
- from bec_lib import DeviceStatus, MessageEndpoints, bec_logger, messages
3
+ from bec_lib import messages
4
+ from bec_lib.device import DeviceStatus
5
+ from bec_lib.endpoints import MessageEndpoints
6
+ from bec_lib.logger import bec_logger
4
7
 
5
8
  logger = bec_logger.logger
6
9
 
@@ -1,6 +1,7 @@
1
1
  import traceback
2
2
 
3
- from bec_lib import bec_logger, messages
3
+ from bec_lib import messages
4
+ from bec_lib.logger import bec_logger
4
5
 
5
6
  from .errors import ScanAbortion
6
7
  from .scans import RequestBase, unpack_scan_args
@@ -1,6 +1,8 @@
1
1
  import traceback
2
2
 
3
- from bec_lib import MessageEndpoints, bec_logger, messages
3
+ from bec_lib import messages
4
+ from bec_lib.endpoints import MessageEndpoints
5
+ from bec_lib.logger import bec_logger
4
6
 
5
7
  logger = bec_logger.logger
6
8
 
@@ -1,6 +1,8 @@
1
1
  import inspect
2
2
 
3
- from bec_lib import MessageEndpoints, bec_logger, plugin_helper
3
+ from bec_lib import plugin_helper
4
+ from bec_lib.endpoints import MessageEndpoints
5
+ from bec_lib.logger import bec_logger
4
6
  from bec_lib.messages import AvailableResourceMessage
5
7
  from bec_lib.signature_serializer import signature_to_dict
6
8
 
@@ -1,6 +1,6 @@
1
1
  import time
2
2
 
3
- from bec_lib import bec_logger
3
+ from bec_lib.logger import bec_logger
4
4
  from bec_server.scan_server.scans import ScanArgType, ScanBase, SyncFlyScanBase
5
5
 
6
6
  logger = bec_logger.logger
@@ -11,7 +11,10 @@ from enum import Enum
11
11
  from rich.console import Console
12
12
  from rich.table import Table
13
13
 
14
- from bec_lib import Alarms, MessageEndpoints, bec_logger, messages, threadlocked
14
+ from bec_lib import messages
15
+ from bec_lib.alarm_handler import Alarms
16
+ from bec_lib.endpoints import MessageEndpoints
17
+ from bec_lib.logger import bec_logger
15
18
 
16
19
  from .errors import LimitError, ScanAbortion
17
20
  from .scan_assembler import ScanAssembler
@@ -84,19 +87,19 @@ class QueueManager:
84
87
  metadata=msg.metadata,
85
88
  )
86
89
 
87
- @threadlocked
88
90
  def add_queue(self, queue_name: str) -> None:
89
91
  """add a new queue to the queue manager"""
90
- if queue_name in self.queues:
91
- queue = self.queues[queue_name]
92
- if not queue.scan_worker.is_alive():
93
- logger.info(f"Restarting worker for queue {queue_name}")
94
- queue.clear()
95
- self.queues[queue_name] = ScanQueue(self, queue_name=queue_name)
96
- self.queues[queue_name].start_worker()
97
- return
98
- self.queues[queue_name] = ScanQueue(self, queue_name=queue_name)
99
- self.queues[queue_name].start_worker()
92
+ with self._lock:
93
+ if queue_name in self.queues:
94
+ queue = self.queues[queue_name]
95
+ if not queue.scan_worker.is_alive():
96
+ logger.info(f"Restarting worker for queue {queue_name}")
97
+ queue.clear()
98
+ self.queues[queue_name] = ScanQueue(self, queue_name=queue_name)
99
+ self.queues[queue_name].start_worker()
100
+ return
101
+ self.queues[queue_name] = ScanQueue(self, queue_name=queue_name)
102
+ self.queues[queue_name].start_worker()
100
103
 
101
104
  def _start_scan_queue_register(self) -> None:
102
105
  self.connector.register(
@@ -125,7 +128,6 @@ class QueueManager:
125
128
  parent.scan_interception(scan_mod_msg)
126
129
  parent.send_queue_status()
127
130
 
128
- @threadlocked
129
131
  def scan_interception(self, scan_mod_msg: messages.ScanQueueModificationMessage) -> None:
130
132
  """handle a scan interception by compiling the requested method name and forwarding the request.
131
133
 
@@ -133,13 +135,14 @@ class QueueManager:
133
135
  scan_mod_msg (messages.ScanQueueModificationMessage): ScanQueueModificationMessage
134
136
 
135
137
  """
136
- logger.info(f"Scan interception: {scan_mod_msg}")
137
- action = scan_mod_msg.content["action"]
138
- parameter = scan_mod_msg.content["parameter"]
139
- queue = scan_mod_msg.content.get("queue", "primary")
140
- getattr(self, f"set_{action}")(
141
- scan_id=scan_mod_msg.content["scan_id"], queue=queue, parameter=parameter
142
- )
138
+ with self._lock:
139
+ logger.info(f"Scan interception: {scan_mod_msg}")
140
+ action = scan_mod_msg.content["action"]
141
+ parameter = scan_mod_msg.content["parameter"]
142
+ queue = scan_mod_msg.content.get("queue", "primary")
143
+ getattr(self, f"set_{action}")(
144
+ scan_id=scan_mod_msg.content["scan_id"], queue=queue, parameter=parameter
145
+ )
143
146
 
144
147
  @requires_queue
145
148
  def set_pause(self, scan_id=None, queue="primary", parameter: dict = None) -> None:
@@ -246,19 +249,19 @@ class QueueManager:
246
249
  continue
247
250
  return history[-1]
248
251
 
249
- @threadlocked
250
252
  def send_queue_status(self) -> None:
251
253
  """send the current queue to redis"""
252
- queue_export = self.export_queue()
253
- if not queue_export:
254
- return
255
- logger.info("New scan queue:")
256
- for queue in self.describe_queue():
257
- logger.info(f"\n {queue}")
258
- self.connector.set_and_publish(
259
- MessageEndpoints.scan_queue_status(),
260
- messages.ScanQueueStatusMessage(queue=queue_export),
261
- )
254
+ with self._lock:
255
+ queue_export = self.export_queue()
256
+ if not queue_export:
257
+ return
258
+ logger.info("New scan queue:")
259
+ for queue in self.describe_queue():
260
+ logger.info(f"\n {queue}")
261
+ self.connector.set_and_publish(
262
+ MessageEndpoints.scan_queue_status(),
263
+ messages.ScanQueueStatusMessage(queue=queue_export),
264
+ )
262
265
 
263
266
  def describe_queue(self) -> list:
264
267
  """create a rich.table description of the current scan queue"""
@@ -411,46 +414,46 @@ class ScanQueue:
411
414
  if updated:
412
415
  return self.active_instruction_queue
413
416
 
414
- @threadlocked
415
417
  def _next_instruction_queue(self) -> bool:
416
418
  """get the next instruction queue from the queue. If no update is available, it will return False."""
417
- try:
418
- aiq = self.active_instruction_queue
419
- if (
420
- aiq is not None
421
- and len(self.queue) > 0
422
- and self.queue[0].status != InstructionQueueStatus.PENDING
423
- ):
424
- logger.info(f"Removing queue item {self.queue[0].describe()} from queue")
425
- self.queue.popleft()
426
- self.queue_manager.send_queue_status()
427
-
428
- if self.status != ScanQueueStatus.PAUSED:
429
- if len(self.queue) == 0:
430
- if aiq is None:
431
- time.sleep(0.1)
419
+ with self._lock:
420
+ try:
421
+ aiq = self.active_instruction_queue
422
+ if (
423
+ aiq is not None
424
+ and len(self.queue) > 0
425
+ and self.queue[0].status != InstructionQueueStatus.PENDING
426
+ ):
427
+ logger.info(f"Removing queue item {self.queue[0].describe()} from queue")
428
+ self.queue.popleft()
429
+ self.queue_manager.send_queue_status()
430
+
431
+ if self.status != ScanQueueStatus.PAUSED:
432
+ if len(self.queue) == 0:
433
+ if aiq is None:
434
+ time.sleep(0.1)
435
+ return False
436
+ self.active_instruction_queue = None
437
+ time.sleep(0.01)
432
438
  return False
433
- self.active_instruction_queue = None
434
- time.sleep(0.01)
435
- return False
439
+
440
+ self.active_instruction_queue = self.queue[0]
441
+ self.history_queue.append(self.active_instruction_queue)
442
+ return True
443
+
444
+ while self.status == ScanQueueStatus.PAUSED and not self.signal_event.is_set():
445
+ if len(self.queue) == 0 and self.auto_reset_enabled:
446
+ # we don't need to pause if there is no scan enqueued
447
+ self.status = ScanQueueStatus.RUNNING
448
+ logger.info("resetting queue status to running")
449
+ time.sleep(0.1)
436
450
 
437
451
  self.active_instruction_queue = self.queue[0]
438
452
  self.history_queue.append(self.active_instruction_queue)
439
453
  return True
440
-
441
- while self.status == ScanQueueStatus.PAUSED and not self.signal_event.is_set():
442
- if len(self.queue) == 0 and self.auto_reset_enabled:
443
- # we don't need to pause if there is no scan enqueued
444
- self.status = ScanQueueStatus.RUNNING
445
- logger.info("resetting queue status to running")
446
- time.sleep(0.1)
447
-
448
- self.active_instruction_queue = self.queue[0]
449
- self.history_queue.append(self.active_instruction_queue)
450
- return True
451
- except IndexError:
452
- time.sleep(0.01)
453
- return False
454
+ except IndexError:
455
+ time.sleep(0.01)
456
+ return False
454
457
 
455
458
  def insert(self, msg: messages.ScanQueueMessage, position=-1, **_kwargs):
456
459
  """insert a new message to the queue"""
@@ -1,9 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
- from bec_lib import Alarms, BECService, BECStatus
4
- from bec_lib import DeviceManagerBase as DeviceManager
5
- from bec_lib import MessageEndpoints, ServiceConfig, bec_logger, messages
3
+ from bec_lib import messages
4
+ from bec_lib.alarm_handler import Alarms
5
+ from bec_lib.bec_service import BECService
6
6
  from bec_lib.connector import ConnectorBase
7
+ from bec_lib.devicemanager import DeviceManagerBase as DeviceManager
8
+ from bec_lib.endpoints import MessageEndpoints
9
+ from bec_lib.logger import bec_logger
10
+ from bec_lib.service_config import ServiceConfig
7
11
 
8
12
  from .scan_assembler import ScanAssembler
9
13
  from .scan_guard import ScanGuard
@@ -31,7 +35,7 @@ class ScanServer(BECService):
31
35
  # self._start_scan_server()
32
36
  self._start_alarm_handler()
33
37
  self._reset_scan_number()
34
- self.status = BECStatus.RUNNING
38
+ self.status = messages.BECStatus.RUNNING
35
39
 
36
40
  def _start_device_manager(self):
37
41
  self.wait_for_service("DeviceServer")
@@ -8,8 +8,11 @@ from typing import Generator, Literal
8
8
 
9
9
  import numpy as np
10
10
 
11
- from bec_lib import MessageEndpoints, Status, bec_logger, messages
11
+ from bec_lib import messages
12
12
  from bec_lib.connector import ConnectorBase
13
+ from bec_lib.device import Status
14
+ from bec_lib.endpoints import MessageEndpoints
15
+ from bec_lib.logger import bec_logger
13
16
 
14
17
  from .errors import DeviceMessageError, ScanAbortion
15
18
 
@@ -3,7 +3,11 @@ import threading
3
3
  import time
4
4
  import traceback
5
5
 
6
- from bec_lib import Alarms, DeviceBase, MessageEndpoints, bec_logger, messages
6
+ from bec_lib import messages
7
+ from bec_lib.alarm_handler import Alarms
8
+ from bec_lib.device import DeviceBase
9
+ from bec_lib.endpoints import MessageEndpoints
10
+ from bec_lib.logger import bec_logger
7
11
 
8
12
  from .device_validation import DeviceValidation
9
13
  from .errors import DeviceMessageError, ScanAbortion
@@ -7,7 +7,9 @@ from typing import Any, Literal
7
7
 
8
8
  import numpy as np
9
9
 
10
- from bec_lib import DeviceManagerBase, MessageEndpoints, bec_logger
10
+ from bec_lib.devicemanager import DeviceManagerBase
11
+ from bec_lib.endpoints import MessageEndpoints
12
+ from bec_lib.logger import bec_logger
11
13
 
12
14
  from .errors import LimitError, ScanAbortion
13
15
  from .path_optimization import PathOptimizerMixin
@@ -1,5 +1,5 @@
1
- from bec_lib import ServiceConfig
2
1
  from bec_lib.messages import BECStatus
2
+ from bec_lib.service_config import ServiceConfig
3
3
  from bec_lib.tests.utils import ConnectorMock
4
4
  from bec_server.scan_server.scan_server import ScanServer
5
5
  from bec_server.scan_server.scan_worker import InstructionQueueStatus