diff --git a/bec_ipython_client/bec_ipython_client/bec_startup.py b/bec_ipython_client/bec_ipython_client/bec_startup.py index 09c01ef9..06434200 100644 --- a/bec_ipython_client/bec_ipython_client/bec_startup.py +++ b/bec_ipython_client/bec_ipython_client/bec_startup.py @@ -5,9 +5,9 @@ import numpy as np # not needed but always nice to have from bec_ipython_client.main import BECIPythonClient as _BECIPythonClient from bec_ipython_client.main import main_dict as _main_dict -from bec_lib import RedisConnector as _RedisConnector -from bec_lib import bec_logger as _bec_logger from bec_lib import plugin_helper +from bec_lib.logger import bec_logger as _bec_logger +from bec_lib.redis_connector import RedisConnector as _RedisConnector try: from bec_widgets.cli.client import BECDockArea as _BECDockArea diff --git a/bec_ipython_client/bec_ipython_client/callbacks/ipython_live_updates.py b/bec_ipython_client/bec_ipython_client/callbacks/ipython_live_updates.py index 5e23bbf4..1be21f8f 100644 --- a/bec_ipython_client/bec_ipython_client/callbacks/ipython_live_updates.py +++ b/bec_ipython_client/bec_ipython_client/callbacks/ipython_live_updates.py @@ -5,8 +5,8 @@ import time from typing import TYPE_CHECKING from bec_ipython_client.callbacks.scan_progress import LiveUpdatesScanProgress -from bec_lib import bec_logger from bec_lib.bec_errors import ScanInterruption +from bec_lib.logger import bec_logger from .live_table import LiveUpdatesTable from .move_device import LiveUpdatesReadbackProgressbar diff --git a/bec_ipython_client/bec_ipython_client/callbacks/live_table.py b/bec_ipython_client/bec_ipython_client/callbacks/live_table.py index cead70d0..201b1719 100644 --- a/bec_ipython_client/bec_ipython_client/callbacks/live_table.py +++ b/bec_ipython_client/bec_ipython_client/callbacks/live_table.py @@ -6,11 +6,12 @@ from typing import TYPE_CHECKING from bec_ipython_client.prettytable import PrettyTable from bec_ipython_client.progressbar import ScanProgressBar -from bec_lib import bec_logger, messages +from bec_lib.logger import bec_logger from .utils import LiveUpdatesBase, check_alarms if TYPE_CHECKING: + from bec_lib import messages from bec_lib.client import BECClient logger = bec_logger.logger diff --git a/bec_ipython_client/bec_ipython_client/callbacks/move_device.py b/bec_ipython_client/bec_ipython_client/callbacks/move_device.py index 91af8821..4832f520 100644 --- a/bec_ipython_client/bec_ipython_client/callbacks/move_device.py +++ b/bec_ipython_client/bec_ipython_client/callbacks/move_device.py @@ -6,7 +6,9 @@ from typing import TYPE_CHECKING import numpy as np from bec_ipython_client.progressbar import DeviceProgressBar -from bec_lib import DeviceManagerBase, MessageEndpoints, messages +from bec_lib import messages +from bec_lib.devicemanager import DeviceManagerBase +from bec_lib.endpoints import MessageEndpoints from .utils import LiveUpdatesBase, check_alarms diff --git a/bec_ipython_client/bec_ipython_client/callbacks/scan_progress.py b/bec_ipython_client/bec_ipython_client/callbacks/scan_progress.py index 4e1611cc..18ca437e 100644 --- a/bec_ipython_client/bec_ipython_client/callbacks/scan_progress.py +++ b/bec_ipython_client/bec_ipython_client/callbacks/scan_progress.py @@ -1,7 +1,8 @@ import time from bec_ipython_client.progressbar import ScanProgressBar -from bec_lib import MessageEndpoints, bec_logger +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .live_table import LiveUpdatesTable diff --git a/bec_ipython_client/bec_ipython_client/callbacks/utils.py b/bec_ipython_client/bec_ipython_client/callbacks/utils.py index 5c3862b9..aad3f8b6 100644 --- a/bec_ipython_client/bec_ipython_client/callbacks/utils.py +++ b/bec_ipython_client/bec_ipython_client/callbacks/utils.py @@ -7,10 +7,11 @@ import traceback from collections.abc import Callable from typing import TYPE_CHECKING -from bec_lib import bec_logger, messages +from bec_lib.logger import bec_logger from bec_lib.request_items import RequestItem if TYPE_CHECKING: + from bec_lib import messages from bec_lib.client import BECClient logger = bec_logger.logger diff --git a/bec_ipython_client/bec_ipython_client/main.py b/bec_ipython_client/bec_ipython_client/main.py index 6d958b6e..46d15b4f 100644 --- a/bec_ipython_client/bec_ipython_client/main.py +++ b/bec_ipython_client/bec_ipython_client/main.py @@ -12,11 +12,13 @@ from bec_ipython_client.beamline_mixin import BeamlineMixin from bec_ipython_client.bec_magics import BECMagics from bec_ipython_client.callbacks.ipython_live_updates import IPythonLiveUpdates from bec_ipython_client.signals import ScanInterruption, SigintHandler -from bec_lib import ServiceConfig, bec_logger, plugin_helper +from bec_lib import plugin_helper from bec_lib.alarm_handler import AlarmBase from bec_lib.callback_handler import EventType from bec_lib.client import BECClient from bec_lib.connector import ConnectorBase +from bec_lib.logger import bec_logger +from bec_lib.service_config import ServiceConfig logger = bec_logger.logger diff --git a/bec_ipython_client/bec_ipython_client/progressbar.py b/bec_ipython_client/bec_ipython_client/progressbar.py index 0710c524..2f9a470f 100644 --- a/bec_ipython_client/bec_ipython_client/progressbar.py +++ b/bec_ipython_client/bec_ipython_client/progressbar.py @@ -6,7 +6,7 @@ import numpy as np import rich.progress from rich.text import Text -from bec_lib import bec_logger +from bec_lib.logger import bec_logger logger = bec_logger.logger diff --git a/bec_ipython_client/demo.py b/bec_ipython_client/demo.py index 113efdde..1f327795 100644 --- a/bec_ipython_client/demo.py +++ b/bec_ipython_client/demo.py @@ -1,5 +1,5 @@ from bec_ipython_client import BECIPythonClient -from bec_lib import bec_logger +from bec_lib.logger import bec_logger logger = bec_logger.logger bec_logger.level = bec_logger.LOGLEVEL.SUCCESS diff --git a/bec_ipython_client/tests/client_tests/test_bec_client.py b/bec_ipython_client/tests/client_tests/test_bec_client.py index b515c3f8..82d9e2fd 100644 --- a/bec_ipython_client/tests/client_tests/test_bec_client.py +++ b/bec_ipython_client/tests/client_tests/test_bec_client.py @@ -6,7 +6,8 @@ import IPython import pytest from bec_ipython_client import BECIPythonClient, main -from bec_lib import RedisConnector, ServiceConfig +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig def test_bec_entry_point_globals_and_post_startup(tmpdir): # , capfd): diff --git a/bec_ipython_client/tests/client_tests/test_move_callback.py b/bec_ipython_client/tests/client_tests/test_move_callback.py index 5eef5741..0318e03f 100644 --- a/bec_ipython_client/tests/client_tests/test_move_callback.py +++ b/bec_ipython_client/tests/client_tests/test_move_callback.py @@ -7,7 +7,8 @@ from bec_ipython_client.callbacks.move_device import ( LiveUpdatesReadbackProgressbar, ReadbackDataMixin, ) -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints @pytest.fixture diff --git a/bec_ipython_client/tests/conftest.py b/bec_ipython_client/tests/conftest.py index 663d9f61..495646f8 100644 --- a/bec_ipython_client/tests/conftest.py +++ b/bec_ipython_client/tests/conftest.py @@ -1,6 +1,6 @@ import pytest -from bec_lib import bec_logger +from bec_lib.logger import bec_logger # overwrite threads_check fixture from bec_lib, # to have it in autouse diff --git a/bec_ipython_client/tests/end-2-end/test_scans_e2e.py b/bec_ipython_client/tests/end-2-end/test_scans_e2e.py index 37cddb5c..039ea687 100644 --- a/bec_ipython_client/tests/end-2-end/test_scans_e2e.py +++ b/bec_ipython_client/tests/end-2-end/test_scans_e2e.py @@ -8,9 +8,11 @@ import numpy as np import pytest from bec_ipython_client.callbacks.utils import ScanRequestError -from bec_lib import MessageEndpoints, bec_logger, configs +from bec_lib import configs from bec_lib.alarm_handler import AlarmBase from bec_lib.bec_errors import ScanAbortion, ScanInterruption +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger logger = bec_logger.logger diff --git a/bec_ipython_client/tests/end-2-end/test_scans_lib_e2e.py b/bec_ipython_client/tests/end-2-end/test_scans_lib_e2e.py index 6aae1286..b6433872 100644 --- a/bec_ipython_client/tests/end-2-end/test_scans_lib_e2e.py +++ b/bec_ipython_client/tests/end-2-end/test_scans_lib_e2e.py @@ -4,8 +4,9 @@ import numpy as np import pytest import yaml -from bec_lib import DeviceConfigError, bec_logger from bec_lib.alarm_handler import AlarmBase +from bec_lib.devicemanager import DeviceConfigError +from bec_lib.logger import bec_logger logger = bec_logger.logger diff --git a/bec_lib/README.md b/bec_lib/README.md index 80fbb6c4..1792ea01 100644 --- a/bec_lib/README.md +++ b/bec_lib/README.md @@ -17,7 +17,7 @@ The documentation is part of the BEC documentation and can be found [here](https ## Usage ```python -from bec_lib import BECClient +from bec_lib.client import BECClient # Create a new BECClient instance and start it bec = BECClient() diff --git a/bec_lib/bec_lib/__init__.py b/bec_lib/bec_lib/__init__.py index b83ce6c2..47a33090 100644 --- a/bec_lib/bec_lib/__init__.py +++ b/bec_lib/bec_lib/__init__.py @@ -1,13 +1 @@ -from bec_lib.alarm_handler import Alarms -from bec_lib.bec_service import BECService -from bec_lib.channel_monitor import channel_monitor_launch, log_monitor_launch -from bec_lib.client import BECClient -from bec_lib.config_helper import ConfigHelper -from bec_lib.device import DeviceBase, DeviceStatus, Status -from bec_lib.devicemanager import DeviceConfigError, DeviceContainer, DeviceManagerBase -from bec_lib.endpoints import MessageEndpoints from bec_lib.logger import bec_logger -from bec_lib.messages import BECStatus -from bec_lib.redis_connector import RedisConnector -from bec_lib.service_config import ServiceConfig -from bec_lib.utils import threadlocked diff --git a/bec_lib/bec_lib/config_helper.py b/bec_lib/bec_lib/config_helper.py index 6b625baf..46edb884 100644 --- a/bec_lib/bec_lib/config_helper.py +++ b/bec_lib/bec_lib/config_helper.py @@ -15,15 +15,15 @@ from typing import TYPE_CHECKING import yaml import bec_lib -from bec_lib import messages from bec_lib.bec_errors import DeviceConfigError, ServiceConfigError from bec_lib.bec_yaml_loader import yaml_load from bec_lib.endpoints import MessageEndpoints from bec_lib.file_utils import DeviceConfigWriter from bec_lib.logger import bec_logger -from bec_lib.messages import DeviceConfigMessage, RequestResponseMessage +from bec_lib.messages import DeviceConfigMessage if TYPE_CHECKING: + from bec_lib.messages import RequestResponseMessage, ServiceResponseMessage from bec_lib.redis_connector import RedisConnector logger = bec_logger.logger @@ -166,7 +166,7 @@ class ConfigHelper: # wait for the device server and scan server to acknowledge the config change self.wait_for_service_response(RID) - def wait_for_service_response(self, RID: str, timeout=10) -> messages.ServiceResponseMessage: + def wait_for_service_response(self, RID: str, timeout=10) -> ServiceResponseMessage: """ wait for service response diff --git a/bec_lib/bec_lib/devicemanager.py b/bec_lib/bec_lib/devicemanager.py index cd5a7794..8cf9509d 100644 --- a/bec_lib/bec_lib/devicemanager.py +++ b/bec_lib/bec_lib/devicemanager.py @@ -12,16 +12,16 @@ from rich.console import Console from rich.table import Table from typeguard import typechecked -from bec_lib import messages from bec_lib.bec_errors import DeviceConfigError from bec_lib.config_helper import ConfigHelper from bec_lib.device import ComputedSignal, Device, DeviceBase, Positioner, ReadoutPriority, Signal from bec_lib.endpoints import MessageEndpoints from bec_lib.logger import bec_logger -from bec_lib.messages import BECStatus, DeviceConfigMessage, DeviceInfoMessage +from bec_lib.messages import BECStatus, ServiceResponseMessage if TYPE_CHECKING: - from bec_lib import BECService + from bec_lib.bec_service import BECService + from bec_lib.messages import DeviceConfigMessage, DeviceInfoMessage logger = bec_logger.logger @@ -470,7 +470,7 @@ class DeviceManagerBase: return self.connector.lpush( MessageEndpoints.service_response(msg.metadata["RID"]), - messages.ServiceResponseMessage( + ServiceResponseMessage( # pylint: disable=no-member response={"accepted": True, "service": self._service._service_name} ), @@ -545,7 +545,7 @@ class DeviceManagerBase: return [] return devices.content["resource"] - def _add_device(self, dev: dict, msg: messages.DeviceInfoMessage): + def _add_device(self, dev: dict, msg: DeviceInfoMessage): name = msg.content["device"] info = msg.content["info"] diff --git a/bec_lib/bec_lib/endpoints.py b/bec_lib/bec_lib/endpoints.py index 1afb9953..6a0a0d18 100644 --- a/bec_lib/bec_lib/endpoints.py +++ b/bec_lib/bec_lib/endpoints.py @@ -2,6 +2,8 @@ Endpoints for communication within the BEC. """ +from __future__ import annotations + # pylint: disable=too-many-public-methods import enum from dataclasses import dataclass diff --git a/bec_lib/bec_lib/messages.py b/bec_lib/bec_lib/messages.py index 79c7b3f9..3ef05ff8 100644 --- a/bec_lib/bec_lib/messages.py +++ b/bec_lib/bec_lib/messages.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import enum import time import warnings diff --git a/bec_lib/bec_lib/request_items.py b/bec_lib/bec_lib/request_items.py index f41a7c31..3b7ce7d1 100644 --- a/bec_lib/bec_lib/request_items.py +++ b/bec_lib/bec_lib/request_items.py @@ -12,7 +12,6 @@ from typing import TYPE_CHECKING from bec_lib import messages from bec_lib.callback_handler import CallbackHandler from bec_lib.logger import bec_logger -from bec_lib.utils import threadlocked logger = bec_logger.logger @@ -134,54 +133,54 @@ class RequestStorage: self._lock = threading.RLock() self.scan_manager = scan_manager - @threadlocked def find_request_by_ID(self, requestID: str) -> RequestItem | None: """find a request item based on its requestID""" - for request in self.storage: - if request.requestID == requestID: - return request - return None + with self._lock: + for request in self.storage: + if request.requestID == requestID: + return request + return None - @threadlocked def update_with_response(self, response_msg: messages.RequestResponseMessage) -> None: """create or update request item based on a new RequestResponseMessage""" - request_item = self.find_request_by_ID(response_msg.metadata.get("RID")) - if request_item: - request_item.update_with_response(response_msg) - logger.debug("Scan queue request exists. Updating with response.") - return + with self._lock: + request_item = self.find_request_by_ID(response_msg.metadata.get("RID")) + if request_item: + request_item.update_with_response(response_msg) + logger.debug("Scan queue request exists. Updating with response.") + return - # it could be that the response arrived before the request - self.storage.append(RequestItem.from_response(self.scan_manager, response_msg)) - logger.debug("Scan queue request does not exist. Creating from response.") + # it could be that the response arrived before the request + self.storage.append(RequestItem.from_response(self.scan_manager, response_msg)) + logger.debug("Scan queue request does not exist. Creating from response.") - @threadlocked def update_with_request(self, request_msg: messages.ScanQueueMessage) -> None: """create or update request item based on a new ScanQueueMessage (i.e. request message)""" - if not request_msg.metadata: + with self._lock: + if not request_msg.metadata: + return + + if not request_msg.metadata.get("RID"): + return + + request_item = self.find_request_by_ID(request_msg.metadata.get("RID")) + if request_item: + request_item.update_with_request(request_msg) + return + + self.storage.append(RequestItem.from_request(self.scan_manager, request_msg)) return - if not request_msg.metadata.get("RID"): - return - - request_item = self.find_request_by_ID(request_msg.metadata.get("RID")) - if request_item: - request_item.update_with_request(request_msg) - return - - self.storage.append(RequestItem.from_request(self.scan_manager, request_msg)) - return - - @threadlocked def update_with_client_message(self, client_message: messages.ClientInfoMessage) -> None: """Update the request item with a new ClientInfoMessage""" - if not client_message.RID: - return + with self._lock: + if not client_message.RID: + return - request_item = self.find_request_by_ID(client_message.RID) - if request_item: - request_item.update_with_client_message(client_message) - return + request_item = self.find_request_by_ID(client_message.RID) + if request_item: + request_item.update_with_client_message(client_message) + return - self.storage.append(RequestItem.from_client_message(self.scan_manager, client_message)) - return + self.storage.append(RequestItem.from_client_message(self.scan_manager, client_message)) + return diff --git a/bec_lib/bec_lib/tests/utils.py b/bec_lib/bec_lib/tests/utils.py index e946e525..b70429c5 100644 --- a/bec_lib/bec_lib/tests/utils.py +++ b/bec_lib/bec_lib/tests/utils.py @@ -10,7 +10,8 @@ from typing import TYPE_CHECKING import yaml import bec_lib -from bec_lib import BECClient, messages +from bec_lib import messages +from bec_lib.client import BECClient from bec_lib.connector import ConnectorBase from bec_lib.devicemanager import DeviceManagerBase from bec_lib.endpoints import EndpointInfo, MessageEndpoints diff --git a/bec_lib/pyproject.toml b/bec_lib/pyproject.toml index 95bca92d..6df8a37e 100644 --- a/bec_lib/pyproject.toml +++ b/bec_lib/pyproject.toml @@ -49,8 +49,8 @@ dev = [ ] [project.scripts] -bec-channel-monitor = "bec_lib:channel_monitor_launch" -bec-log-monitor = "bec_lib:log_monitor_launch" +bec-channel-monitor = "bec_lib.channel_monitor:channel_monitor_launch" +bec-log-monitor = "bec_lib.channel_monitor:log_monitor_launch" [project.entry-points.pytest11] bec_lib_fixtures = "bec_lib.tests.fixtures" diff --git a/bec_lib/tests/test_bec_service.py b/bec_lib/tests/test_bec_service.py index e215bfcc..d7a5b32a 100644 --- a/bec_lib/tests/test_bec_service.py +++ b/bec_lib/tests/test_bec_service.py @@ -6,9 +6,10 @@ from unittest import mock import pytest import bec_lib -from bec_lib import bec_logger, messages +from bec_lib import messages from bec_lib.bec_service import BECService from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.messages import BECStatus from bec_lib.service_config import ServiceConfig diff --git a/bec_lib/tests/test_dap_plugins.py b/bec_lib/tests/test_dap_plugins.py index 9865747b..4bdf84ce 100644 --- a/bec_lib/tests/test_dap_plugins.py +++ b/bec_lib/tests/test_dap_plugins.py @@ -3,10 +3,11 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages from bec_lib.dap_plugin_objects import DAPPluginObject, LmfitService1D from bec_lib.dap_plugins import DAPPlugins from bec_lib.device import DeviceBase +from bec_lib.endpoints import MessageEndpoints from bec_lib.scan_items import ScanItem from bec_lib.scan_report import ScanReport diff --git a/bec_lib/tests/test_plugin_helper.py b/bec_lib/tests/test_plugin_helper.py index fe0f53c9..cb243be4 100644 --- a/bec_lib/tests/test_plugin_helper.py +++ b/bec_lib/tests/test_plugin_helper.py @@ -6,7 +6,7 @@ from bec_lib import plugin_helper @pytest.mark.parametrize( "class_spec, out_name", - [("bec_lib.messages.BECMessage", "BECMessage"), ("bec_lib.BECStatus", "BECStatus")], + [("bec_lib.messages.BECMessage", "BECMessage"), ("bec_lib.messages.BECStatus", "BECStatus")], ) def test_get_plugin_class(class_spec, out_name): cls = plugin_helper.get_plugin_class(class_spec, [bec_lib]) diff --git a/bec_lib/tests/test_scan_manager.py b/bec_lib/tests/test_scan_manager.py index 38096782..4a2ea770 100644 --- a/bec_lib/tests/test_scan_manager.py +++ b/bec_lib/tests/test_scan_manager.py @@ -2,7 +2,8 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_lib.scan_manager import ScanManager diff --git a/bec_lib/util_scripts/plugin_setup_files/post_startup.py b/bec_lib/util_scripts/plugin_setup_files/post_startup.py index 4ec2bfdd..07d6da47 100644 --- a/bec_lib/util_scripts/plugin_setup_files/post_startup.py +++ b/bec_lib/util_scripts/plugin_setup_files/post_startup.py @@ -10,7 +10,7 @@ While command-line arguments have to be set in the pre-startup script, the post-startup script can be used to load beamline specific information and to setup the prompts. - from bec_lib import bec_logger + from bec_lib.logger import bec_logger logger = bec_logger.logger diff --git a/bec_lib/util_scripts/plugin_setup_files/scan_plugin_template.py b/bec_lib/util_scripts/plugin_setup_files/scan_plugin_template.py index bb8ea061..29e0d2b0 100644 --- a/bec_lib/util_scripts/plugin_setup_files/scan_plugin_template.py +++ b/bec_lib/util_scripts/plugin_setup_files/scan_plugin_template.py @@ -25,7 +25,9 @@ but they are executed in a specific order: # import numpy as np -# from bec_lib import MessageEndpoints, bec_logger, messages +# from bec_lib.endpoints import MessageEndpoints +# from bec_lib.logger import bec_logger +# from bec_lib import messages # from bec_server.scan_server.errors import ScanAbortion # from bec_server.scan_server.scans import FlyScanBase, RequestBase, ScanArgType, ScanBase diff --git a/bec_server/bec_server/data_processing/cli/launch.py b/bec_server/bec_server/data_processing/cli/launch.py index 289d827a..bd96893f 100644 --- a/bec_server/bec_server/data_processing/cli/launch.py +++ b/bec_server/bec_server/data_processing/cli/launch.py @@ -5,7 +5,9 @@ import argparse import threading import bec_server.data_processing as data_processing -from bec_lib import RedisConnector, ServiceConfig, bec_logger +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server.data_processing.lmfit1d_service import LmfitService1D logger = bec_logger.logger diff --git a/bec_server/bec_server/data_processing/dap_server.py b/bec_server/bec_server/data_processing/dap_server.py index affa7fd8..a1be0287 100644 --- a/bec_server/bec_server/data_processing/dap_server.py +++ b/bec_server/bec_server/data_processing/dap_server.py @@ -1,5 +1,7 @@ -from bec_lib import BECClient, ServiceConfig, bec_logger +from bec_lib.client import BECClient from bec_lib.connector import ConnectorBase +from bec_lib.logger import bec_logger +from bec_lib.service_config import ServiceConfig from .dap_service_manager import DAPServiceManager diff --git a/bec_server/bec_server/data_processing/dap_service.py b/bec_server/bec_server/data_processing/dap_service.py index c77e674f..276b4835 100644 --- a/bec_server/bec_server/data_processing/dap_service.py +++ b/bec_server/bec_server/data_processing/dap_service.py @@ -4,11 +4,11 @@ import abc from typing import TYPE_CHECKING # import numpy as np -from bec_lib import bec_logger +from bec_lib.logger import bec_logger from bec_lib.signature_serializer import signature_to_dict if TYPE_CHECKING: - from bec_lib import BECClient + from bec_lib.client import BECClient logger = bec_logger.logger diff --git a/bec_server/bec_server/data_processing/dap_service_manager.py b/bec_server/bec_server/data_processing/dap_service_manager.py index da2a5475..cc5ba19f 100644 --- a/bec_server/bec_server/data_processing/dap_service_manager.py +++ b/bec_server/bec_server/data_processing/dap_service_manager.py @@ -1,6 +1,9 @@ from __future__ import annotations -from bec_lib import BECClient, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.client import BECClient +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.redis_connector import MessageObject logger = bec_logger.logger diff --git a/bec_server/bec_server/data_processing/lmfit1d_service.py b/bec_server/bec_server/data_processing/lmfit1d_service.py index e0616dd5..fc826e39 100644 --- a/bec_server/bec_server/data_processing/lmfit1d_service.py +++ b/bec_server/bec_server/data_processing/lmfit1d_service.py @@ -8,8 +8,11 @@ from typing import TYPE_CHECKING import lmfit import numpy as np -from bec_lib import DeviceBase, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.device import DeviceBase +from bec_lib.endpoints import MessageEndpoints from bec_lib.lmfit_serializer import deserialize_param_object, serialize_lmfit_params +from bec_lib.logger import bec_logger from bec_lib.serialization import MsgpackSerialization from bec_server.data_processing.dap_service import DAPError, DAPServiceBase diff --git a/bec_server/bec_server/device_server/__init__.py b/bec_server/bec_server/device_server/__init__.py index 074b5a9f..b6149d5c 100644 --- a/bec_server/bec_server/device_server/__init__.py +++ b/bec_server/bec_server/device_server/__init__.py @@ -1,6 +1,6 @@ import logging -from bec_lib import DeviceManagerBase +from bec_lib.devicemanager import DeviceManagerBase from . import devices from .cli.launch import main diff --git a/bec_server/bec_server/device_server/cli/launch.py b/bec_server/bec_server/device_server/cli/launch.py index 0718d641..6d7d8331 100644 --- a/bec_server/bec_server/device_server/cli/launch.py +++ b/bec_server/bec_server/device_server/cli/launch.py @@ -16,7 +16,9 @@ for entry_point in entry_points: import argparse import threading -from bec_lib import RedisConnector, ServiceConfig, bec_logger +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server import device_server logger = bec_logger.logger diff --git a/bec_server/bec_server/device_server/device_server.py b/bec_server/bec_server/device_server/device_server.py index 9d0cd06f..15540777 100644 --- a/bec_server/bec_server/device_server/device_server.py +++ b/bec_server/bec_server/device_server/device_server.py @@ -8,9 +8,13 @@ import ophyd from ophyd import Kind, OphydObject, Staged from ophyd.utils import errors as ophyd_errors -from bec_lib import Alarms, BECService, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.bec_service import BECService from bec_lib.connector import ConnectorBase from bec_lib.device import OnFailure +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.messages import BECStatus from bec_server.device_server.devices.devicemanager import DeviceManagerDS from bec_server.device_server.rpc_mixin import RPCMixin diff --git a/bec_server/bec_server/device_server/devices/config_update_handler.py b/bec_server/bec_server/device_server/devices/config_update_handler.py index 0b9afbde..c8da4495 100644 --- a/bec_server/bec_server/device_server/devices/config_update_handler.py +++ b/bec_server/bec_server/device_server/devices/config_update_handler.py @@ -4,7 +4,10 @@ import copy import traceback from typing import TYPE_CHECKING -from bec_lib import DeviceConfigError, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.devicemanager import DeviceConfigError +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger if TYPE_CHECKING: from devicemanager import DeviceManagerDS diff --git a/bec_server/bec_server/device_server/devices/devicemanager.py b/bec_server/bec_server/device_server/devices/devicemanager.py index 03553cb1..c54de77f 100644 --- a/bec_server/bec_server/device_server/devices/devicemanager.py +++ b/bec_server/bec_server/device_server/devices/devicemanager.py @@ -18,16 +18,13 @@ from ophyd.ophydobj import OphydObject from ophyd.signal import EpicsSignalBase from typeguard import typechecked -from bec_lib import ( - BECService, - DeviceBase, - DeviceConfigError, - DeviceManagerBase, - MessageEndpoints, - bec_logger, - messages, - plugin_helper, -) +from bec_lib import messages, plugin_helper +from bec_lib.bec_errors import DeviceConfigError +from bec_lib.bec_service import BECService +from bec_lib.device import DeviceBase +from bec_lib.devicemanager import DeviceManagerBase +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_server.device_server.devices.config_update_handler import ConfigUpdateHandler from bec_server.device_server.devices.device_serializer import get_device_info diff --git a/bec_server/bec_server/device_server/rpc_mixin.py b/bec_server/bec_server/device_server/rpc_mixin.py index 3b7e3a0b..b7268888 100644 --- a/bec_server/bec_server/device_server/rpc_mixin.py +++ b/bec_server/bec_server/device_server/rpc_mixin.py @@ -5,7 +5,10 @@ from typing import Any import ophyd -from bec_lib import Alarms, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_server.device_server.devices import is_serializable, rgetattr logger = bec_logger.logger diff --git a/bec_server/bec_server/file_writer/cli/launch.py b/bec_server/bec_server/file_writer/cli/launch.py index e32ec136..bcb1414b 100644 --- a/bec_server/bec_server/file_writer/cli/launch.py +++ b/bec_server/bec_server/file_writer/cli/launch.py @@ -4,7 +4,9 @@ import argparse import os import threading -from bec_lib import RedisConnector, ServiceConfig, bec_logger +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server import file_writer logger = bec_logger.logger diff --git a/bec_server/bec_server/file_writer/default_writer.py b/bec_server/bec_server/file_writer/default_writer.py index 60416e00..c4f5aab6 100644 --- a/bec_server/bec_server/file_writer/default_writer.py +++ b/bec_server/bec_server/file_writer/default_writer.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: - from bec_lib import DeviceManagerBase + from bec_lib.devicemanager import DeviceManagerBase from bec_server.file_writer.file_writer import HDF5Storage diff --git a/bec_server/bec_server/file_writer/file_writer.py b/bec_server/bec_server/file_writer/file_writer.py index 32493414..a63b6b2c 100644 --- a/bec_server/bec_server/file_writer/file_writer.py +++ b/bec_server/bec_server/file_writer/file_writer.py @@ -9,7 +9,9 @@ import typing import h5py -from bec_lib import MessageEndpoints, bec_logger, messages, plugin_helper +from bec_lib import messages, plugin_helper +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .default_writer import NeXus_format as default_NeXus_format from .merged_dicts import merge_dicts diff --git a/bec_server/bec_server/file_writer/file_writer_manager.py b/bec_server/bec_server/file_writer/file_writer_manager.py index 5caec537..9593ba03 100644 --- a/bec_server/bec_server/file_writer/file_writer_manager.py +++ b/bec_server/bec_server/file_writer/file_writer_manager.py @@ -3,19 +3,16 @@ from __future__ import annotations import threading import traceback -from bec_lib import ( - BECService, - DeviceManagerBase, - MessageEndpoints, - ServiceConfig, - bec_logger, - messages, - threadlocked, -) +from bec_lib import messages from bec_lib.alarm_handler import Alarms from bec_lib.async_data import AsyncDataHandler +from bec_lib.bec_service import BECService +from bec_lib.devicemanager import DeviceManagerBase +from bec_lib.endpoints import MessageEndpoints from bec_lib.file_utils import FileWriter +from bec_lib.logger import bec_logger from bec_lib.redis_connector import MessageObject, RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server.file_writer.file_writer import NexusFileWriter logger = bec_logger.logger @@ -254,7 +251,6 @@ class FileWriterManager(BECService): msgs ) - @threadlocked def check_storage_status(self, scan_id: str) -> None: """ 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): Args: scan_id (str): Scan ID """ - if not self.scan_storage.get(scan_id): - return - self.update_baseline_reading(scan_id) - self.update_file_references(scan_id) - if self.scan_storage[scan_id].ready_to_write(): - self.update_async_data(scan_id) - self.write_file(scan_id) + with self._lock: + if not self.scan_storage.get(scan_id): + return + self.update_baseline_reading(scan_id) + self.update_file_references(scan_id) + if self.scan_storage[scan_id].ready_to_write(): + self.update_async_data(scan_id) + self.write_file(scan_id) def write_file(self, scan_id: str) -> None: """ diff --git a/bec_server/bec_server/file_writer_plugins/cSAXS.py b/bec_server/bec_server/file_writer_plugins/cSAXS.py index 3a393ff9..f9db022f 100644 --- a/bec_server/bec_server/file_writer_plugins/cSAXS.py +++ b/bec_server/bec_server/file_writer_plugins/cSAXS.py @@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Any import numpy as np if TYPE_CHECKING: - from bec_lib import DeviceManagerBase + from bec_lib.devicemanager import DeviceManagerBase from bec_server.file_writer.file_writer import HDF5Storage diff --git a/bec_server/bec_server/scan_bundler/bec_emitter.py b/bec_server/bec_server/scan_bundler/bec_emitter.py index 17b3d04b..50f5c55d 100644 --- a/bec_server/bec_server/scan_bundler/bec_emitter.py +++ b/bec_server/bec_server/scan_bundler/bec_emitter.py @@ -2,7 +2,9 @@ from __future__ import annotations from typing import TYPE_CHECKING -from bec_lib import MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .emitter import EmitterBase diff --git a/bec_server/bec_server/scan_bundler/bluesky_emitter.py b/bec_server/bec_server/scan_bundler/bluesky_emitter.py index 40c9bcd8..abf4d0b2 100644 --- a/bec_server/bec_server/scan_bundler/bluesky_emitter.py +++ b/bec_server/bec_server/scan_bundler/bluesky_emitter.py @@ -6,7 +6,8 @@ from typing import TYPE_CHECKING import msgpack -from bec_lib import MessageEndpoints, bec_logger +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .emitter import EmitterBase diff --git a/bec_server/bec_server/scan_bundler/cli/launch.py b/bec_server/bec_server/scan_bundler/cli/launch.py index 0bdab751..8b33c837 100644 --- a/bec_server/bec_server/scan_bundler/cli/launch.py +++ b/bec_server/bec_server/scan_bundler/cli/launch.py @@ -4,7 +4,9 @@ import argparse import threading -from bec_lib import RedisConnector, ServiceConfig, bec_logger +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server import scan_bundler logger = bec_logger.logger diff --git a/bec_server/bec_server/scan_bundler/scan_bundler.py b/bec_server/bec_server/scan_bundler/scan_bundler.py index 00410a91..9a8ff435 100644 --- a/bec_server/bec_server/scan_bundler/scan_bundler.py +++ b/bec_server/bec_server/scan_bundler/scan_bundler.py @@ -5,8 +5,12 @@ import traceback from collections.abc import Callable from concurrent.futures import ThreadPoolExecutor -from bec_lib import BECService, BECStatus, DeviceManagerBase, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.bec_service import BECService from bec_lib.connector import ConnectorBase +from bec_lib.devicemanager import DeviceManagerBase +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .bec_emitter import BECEmitter from .bluesky_emitter import BlueskyEmitter @@ -52,7 +56,7 @@ class ScanBundler(BECService): self._lock = threading.Lock() self._emitter = [] self._initialize_emitters() - self.status = BECStatus.RUNNING + self.status = messages.BECStatus.RUNNING def _initialize_emitters(self): self._emitter = [BECEmitter(self), BlueskyEmitter(self)] diff --git a/bec_server/bec_server/scan_server/cli/launch.py b/bec_server/bec_server/scan_server/cli/launch.py index 922fc54c..537c5b0e 100644 --- a/bec_server/bec_server/scan_server/cli/launch.py +++ b/bec_server/bec_server/scan_server/cli/launch.py @@ -4,7 +4,9 @@ import argparse import threading -from bec_lib import RedisConnector, ServiceConfig, bec_logger +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server import scan_server logger = bec_logger.logger diff --git a/bec_server/bec_server/scan_server/device_validation.py b/bec_server/bec_server/scan_server/device_validation.py index 7ca8b6f6..e069e02f 100644 --- a/bec_server/bec_server/scan_server/device_validation.py +++ b/bec_server/bec_server/scan_server/device_validation.py @@ -1,6 +1,9 @@ from collections.abc import Callable -from bec_lib import DeviceStatus, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.device import DeviceStatus +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger logger = bec_logger.logger diff --git a/bec_server/bec_server/scan_server/scan_assembler.py b/bec_server/bec_server/scan_server/scan_assembler.py index e98cb056..85afbab2 100644 --- a/bec_server/bec_server/scan_server/scan_assembler.py +++ b/bec_server/bec_server/scan_server/scan_assembler.py @@ -1,6 +1,7 @@ import traceback -from bec_lib import bec_logger, messages +from bec_lib import messages +from bec_lib.logger import bec_logger from .errors import ScanAbortion from .scans import RequestBase, unpack_scan_args diff --git a/bec_server/bec_server/scan_server/scan_guard.py b/bec_server/bec_server/scan_server/scan_guard.py index be586afd..9a8914c4 100644 --- a/bec_server/bec_server/scan_server/scan_guard.py +++ b/bec_server/bec_server/scan_server/scan_guard.py @@ -1,6 +1,8 @@ import traceback -from bec_lib import MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger logger = bec_logger.logger diff --git a/bec_server/bec_server/scan_server/scan_manager.py b/bec_server/bec_server/scan_server/scan_manager.py index d037462d..d6459585 100644 --- a/bec_server/bec_server/scan_server/scan_manager.py +++ b/bec_server/bec_server/scan_server/scan_manager.py @@ -1,6 +1,8 @@ import inspect -from bec_lib import MessageEndpoints, bec_logger, plugin_helper +from bec_lib import plugin_helper +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.messages import AvailableResourceMessage from bec_lib.signature_serializer import signature_to_dict diff --git a/bec_server/bec_server/scan_server/scan_plugins/otf_scan.py b/bec_server/bec_server/scan_server/scan_plugins/otf_scan.py index 11702636..51470ae7 100644 --- a/bec_server/bec_server/scan_server/scan_plugins/otf_scan.py +++ b/bec_server/bec_server/scan_server/scan_plugins/otf_scan.py @@ -1,6 +1,6 @@ import time -from bec_lib import bec_logger +from bec_lib.logger import bec_logger from bec_server.scan_server.scans import ScanArgType, ScanBase, SyncFlyScanBase logger = bec_logger.logger diff --git a/bec_server/bec_server/scan_server/scan_queue.py b/bec_server/bec_server/scan_server/scan_queue.py index ed83a66c..07a45819 100644 --- a/bec_server/bec_server/scan_server/scan_queue.py +++ b/bec_server/bec_server/scan_server/scan_queue.py @@ -11,7 +11,10 @@ from enum import Enum from rich.console import Console from rich.table import Table -from bec_lib import Alarms, MessageEndpoints, bec_logger, messages, threadlocked +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .errors import LimitError, ScanAbortion from .scan_assembler import ScanAssembler @@ -84,19 +87,19 @@ class QueueManager: metadata=msg.metadata, ) - @threadlocked def add_queue(self, queue_name: str) -> None: """add a new queue to the queue manager""" - if queue_name in self.queues: - queue = self.queues[queue_name] - if not queue.scan_worker.is_alive(): - logger.info(f"Restarting worker for queue {queue_name}") - queue.clear() - self.queues[queue_name] = ScanQueue(self, queue_name=queue_name) - self.queues[queue_name].start_worker() - return - self.queues[queue_name] = ScanQueue(self, queue_name=queue_name) - self.queues[queue_name].start_worker() + with self._lock: + if queue_name in self.queues: + queue = self.queues[queue_name] + if not queue.scan_worker.is_alive(): + logger.info(f"Restarting worker for queue {queue_name}") + queue.clear() + self.queues[queue_name] = ScanQueue(self, queue_name=queue_name) + self.queues[queue_name].start_worker() + return + self.queues[queue_name] = ScanQueue(self, queue_name=queue_name) + self.queues[queue_name].start_worker() def _start_scan_queue_register(self) -> None: self.connector.register( @@ -125,7 +128,6 @@ class QueueManager: parent.scan_interception(scan_mod_msg) parent.send_queue_status() - @threadlocked def scan_interception(self, scan_mod_msg: messages.ScanQueueModificationMessage) -> None: """handle a scan interception by compiling the requested method name and forwarding the request. @@ -133,13 +135,14 @@ class QueueManager: scan_mod_msg (messages.ScanQueueModificationMessage): ScanQueueModificationMessage """ - logger.info(f"Scan interception: {scan_mod_msg}") - action = scan_mod_msg.content["action"] - parameter = scan_mod_msg.content["parameter"] - queue = scan_mod_msg.content.get("queue", "primary") - getattr(self, f"set_{action}")( - scan_id=scan_mod_msg.content["scan_id"], queue=queue, parameter=parameter - ) + with self._lock: + logger.info(f"Scan interception: {scan_mod_msg}") + action = scan_mod_msg.content["action"] + parameter = scan_mod_msg.content["parameter"] + queue = scan_mod_msg.content.get("queue", "primary") + getattr(self, f"set_{action}")( + scan_id=scan_mod_msg.content["scan_id"], queue=queue, parameter=parameter + ) @requires_queue def set_pause(self, scan_id=None, queue="primary", parameter: dict = None) -> None: @@ -246,19 +249,19 @@ class QueueManager: continue return history[-1] - @threadlocked def send_queue_status(self) -> None: """send the current queue to redis""" - queue_export = self.export_queue() - if not queue_export: - return - logger.info("New scan queue:") - for queue in self.describe_queue(): - logger.info(f"\n {queue}") - self.connector.set_and_publish( - MessageEndpoints.scan_queue_status(), - messages.ScanQueueStatusMessage(queue=queue_export), - ) + with self._lock: + queue_export = self.export_queue() + if not queue_export: + return + logger.info("New scan queue:") + for queue in self.describe_queue(): + logger.info(f"\n {queue}") + self.connector.set_and_publish( + MessageEndpoints.scan_queue_status(), + messages.ScanQueueStatusMessage(queue=queue_export), + ) def describe_queue(self) -> list: """create a rich.table description of the current scan queue""" @@ -411,46 +414,46 @@ class ScanQueue: if updated: return self.active_instruction_queue - @threadlocked def _next_instruction_queue(self) -> bool: """get the next instruction queue from the queue. If no update is available, it will return False.""" - try: - aiq = self.active_instruction_queue - if ( - aiq is not None - and len(self.queue) > 0 - and self.queue[0].status != InstructionQueueStatus.PENDING - ): - logger.info(f"Removing queue item {self.queue[0].describe()} from queue") - self.queue.popleft() - self.queue_manager.send_queue_status() + with self._lock: + try: + aiq = self.active_instruction_queue + if ( + aiq is not None + and len(self.queue) > 0 + and self.queue[0].status != InstructionQueueStatus.PENDING + ): + logger.info(f"Removing queue item {self.queue[0].describe()} from queue") + self.queue.popleft() + self.queue_manager.send_queue_status() - if self.status != ScanQueueStatus.PAUSED: - if len(self.queue) == 0: - if aiq is None: - time.sleep(0.1) + if self.status != ScanQueueStatus.PAUSED: + if len(self.queue) == 0: + if aiq is None: + time.sleep(0.1) + return False + self.active_instruction_queue = None + time.sleep(0.01) return False - self.active_instruction_queue = None - time.sleep(0.01) - return False + + self.active_instruction_queue = self.queue[0] + self.history_queue.append(self.active_instruction_queue) + return True + + while self.status == ScanQueueStatus.PAUSED and not self.signal_event.is_set(): + if len(self.queue) == 0 and self.auto_reset_enabled: + # we don't need to pause if there is no scan enqueued + self.status = ScanQueueStatus.RUNNING + logger.info("resetting queue status to running") + time.sleep(0.1) self.active_instruction_queue = self.queue[0] self.history_queue.append(self.active_instruction_queue) return True - - while self.status == ScanQueueStatus.PAUSED and not self.signal_event.is_set(): - if len(self.queue) == 0 and self.auto_reset_enabled: - # we don't need to pause if there is no scan enqueued - self.status = ScanQueueStatus.RUNNING - logger.info("resetting queue status to running") - time.sleep(0.1) - - self.active_instruction_queue = self.queue[0] - self.history_queue.append(self.active_instruction_queue) - return True - except IndexError: - time.sleep(0.01) - return False + except IndexError: + time.sleep(0.01) + return False def insert(self, msg: messages.ScanQueueMessage, position=-1, **_kwargs): """insert a new message to the queue""" diff --git a/bec_server/bec_server/scan_server/scan_server.py b/bec_server/bec_server/scan_server/scan_server.py index 73be8b77..0552bda0 100644 --- a/bec_server/bec_server/scan_server/scan_server.py +++ b/bec_server/bec_server/scan_server/scan_server.py @@ -1,9 +1,13 @@ from __future__ import annotations -from bec_lib import Alarms, BECService, BECStatus -from bec_lib import DeviceManagerBase as DeviceManager -from bec_lib import MessageEndpoints, ServiceConfig, bec_logger, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.bec_service import BECService from bec_lib.connector import ConnectorBase +from bec_lib.devicemanager import DeviceManagerBase as DeviceManager +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger +from bec_lib.service_config import ServiceConfig from .scan_assembler import ScanAssembler from .scan_guard import ScanGuard @@ -31,7 +35,7 @@ class ScanServer(BECService): # self._start_scan_server() self._start_alarm_handler() self._reset_scan_number() - self.status = BECStatus.RUNNING + self.status = messages.BECStatus.RUNNING def _start_device_manager(self): self.wait_for_service("DeviceServer") diff --git a/bec_server/bec_server/scan_server/scan_stubs.py b/bec_server/bec_server/scan_server/scan_stubs.py index e4d1f728..0827a5d4 100644 --- a/bec_server/bec_server/scan_server/scan_stubs.py +++ b/bec_server/bec_server/scan_server/scan_stubs.py @@ -8,8 +8,11 @@ from typing import Generator, Literal import numpy as np -from bec_lib import MessageEndpoints, Status, bec_logger, messages +from bec_lib import messages from bec_lib.connector import ConnectorBase +from bec_lib.device import Status +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .errors import DeviceMessageError, ScanAbortion diff --git a/bec_server/bec_server/scan_server/scan_worker.py b/bec_server/bec_server/scan_server/scan_worker.py index fd65aaa3..4970b8ad 100644 --- a/bec_server/bec_server/scan_server/scan_worker.py +++ b/bec_server/bec_server/scan_server/scan_worker.py @@ -3,7 +3,11 @@ import threading import time import traceback -from bec_lib import Alarms, DeviceBase, MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.device import DeviceBase +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .device_validation import DeviceValidation from .errors import DeviceMessageError, ScanAbortion diff --git a/bec_server/bec_server/scan_server/scans.py b/bec_server/bec_server/scan_server/scans.py index 077b7863..3718efde 100644 --- a/bec_server/bec_server/scan_server/scans.py +++ b/bec_server/bec_server/scan_server/scans.py @@ -7,7 +7,9 @@ from typing import Any, Literal import numpy as np -from bec_lib import DeviceManagerBase, MessageEndpoints, bec_logger +from bec_lib.devicemanager import DeviceManagerBase +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from .errors import LimitError, ScanAbortion from .path_optimization import PathOptimizerMixin diff --git a/bec_server/bec_server/scan_server/tests/utils.py b/bec_server/bec_server/scan_server/tests/utils.py index d57ab3c3..206d5187 100644 --- a/bec_server/bec_server/scan_server/tests/utils.py +++ b/bec_server/bec_server/scan_server/tests/utils.py @@ -1,5 +1,5 @@ -from bec_lib import ServiceConfig from bec_lib.messages import BECStatus +from bec_lib.service_config import ServiceConfig from bec_lib.tests.utils import ConnectorMock from bec_server.scan_server.scan_server import ScanServer from bec_server.scan_server.scan_worker import InstructionQueueStatus diff --git a/bec_server/bec_server/scihub/cli/launch.py b/bec_server/bec_server/scihub/cli/launch.py index 4615ead5..a33d8bc2 100644 --- a/bec_server/bec_server/scihub/cli/launch.py +++ b/bec_server/bec_server/scihub/cli/launch.py @@ -4,7 +4,9 @@ import argparse import threading -from bec_lib import RedisConnector, ServiceConfig, bec_logger +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_server import scihub logger = bec_logger.logger diff --git a/bec_server/bec_server/scihub/scibec/config_handler.py b/bec_server/bec_server/scihub/scibec/config_handler.py index ef31a94b..067a9577 100644 --- a/bec_server/bec_server/scihub/scibec/config_handler.py +++ b/bec_server/bec_server/scihub/scibec/config_handler.py @@ -7,10 +7,12 @@ import uuid from typing import TYPE_CHECKING import bec_lib -from bec_lib import DeviceConfigError -from bec_lib import DeviceManagerBase as DeviceManager -from bec_lib import MessageEndpoints, bec_logger, messages +from bec_lib import messages +from bec_lib.bec_errors import DeviceConfigError from bec_lib.connector import ConnectorBase +from bec_lib.devicemanager import DeviceManagerBase as DeviceManager +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.scibec_validator import SciBecValidator if TYPE_CHECKING: diff --git a/bec_server/bec_server/scihub/scibec/scibec_connector.py b/bec_server/bec_server/scihub/scibec/scibec_connector.py index df29ffdd..391c0980 100644 --- a/bec_server/bec_server/scihub/scibec/scibec_connector.py +++ b/bec_server/bec_server/scihub/scibec/scibec_connector.py @@ -7,8 +7,10 @@ import py_scibec from dotenv import dotenv_values from py_scibec import SciBecCore -from bec_lib import MessageEndpoints, bec_logger, messages +from bec_lib import messages from bec_lib.connector import ConnectorBase +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_server.scihub.repeated_timer import RepeatedTimer from .config_handler import ConfigHandler diff --git a/bec_server/bec_server/scihub/scibec/scibec_metadata_handler.py b/bec_server/bec_server/scihub/scibec/scibec_metadata_handler.py index 428feb63..95271e5e 100644 --- a/bec_server/bec_server/scihub/scibec/scibec_metadata_handler.py +++ b/bec_server/bec_server/scihub/scibec/scibec_metadata_handler.py @@ -8,7 +8,8 @@ import numpy as np import py_scibec import py_scibec_openapi_client.models as py_scibec_models -from bec_lib import MessageEndpoints, bec_logger +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger from bec_lib.serialization import json_ext logger = bec_logger.logger diff --git a/bec_server/bec_server/scihub/scihub.py b/bec_server/bec_server/scihub/scihub.py index c117891d..aee2abfd 100644 --- a/bec_server/bec_server/scihub/scihub.py +++ b/bec_server/bec_server/scihub/scihub.py @@ -1,5 +1,7 @@ -from bec_lib import BECService, BECStatus, ServiceConfig +from bec_lib import messages +from bec_lib.bec_service import BECService from bec_lib.connector import ConnectorBase +from bec_lib.service_config import ServiceConfig from bec_server.scihub.scibec import SciBecConnector from bec_server.scihub.scilog import SciLogConnector @@ -12,7 +14,7 @@ class SciHub(BECService): self.scilog_connector = None self._start_scibec_connector() self._start_scilog_connector() - self.status = BECStatus.RUNNING + self.status = messages.BECStatus.RUNNING def _start_scibec_connector(self): self.wait_for_service("DeviceServer") diff --git a/bec_server/bec_server/scihub/scilog/scilog.py b/bec_server/bec_server/scihub/scilog/scilog.py index 64106f69..0f1de699 100644 --- a/bec_server/bec_server/scihub/scilog/scilog.py +++ b/bec_server/bec_server/scihub/scilog/scilog.py @@ -6,7 +6,10 @@ from typing import TYPE_CHECKING import requests from dotenv import dotenv_values -from bec_lib import MessageEndpoints, RedisConnector, bec_logger, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger +from bec_lib.redis_connector import RedisConnector from bec_server.scihub.repeated_timer import RepeatedTimer logger = bec_logger.logger diff --git a/bec_server/tests/tests_data_processing/conftest.py b/bec_server/tests/tests_data_processing/conftest.py index 663d9f61..495646f8 100644 --- a/bec_server/tests/tests_data_processing/conftest.py +++ b/bec_server/tests/tests_data_processing/conftest.py @@ -1,6 +1,6 @@ import pytest -from bec_lib import bec_logger +from bec_lib.logger import bec_logger # overwrite threads_check fixture from bec_lib, # to have it in autouse diff --git a/bec_server/tests/tests_data_processing/test_dap_server.py b/bec_server/tests/tests_data_processing/test_dap_server.py index 343414d0..5f324bbb 100644 --- a/bec_server/tests/tests_data_processing/test_dap_server.py +++ b/bec_server/tests/tests_data_processing/test_dap_server.py @@ -1,6 +1,6 @@ from unittest import mock -from bec_lib import ServiceConfig +from bec_lib.service_config import ServiceConfig from bec_server.data_processing.dap_server import DAPServer from bec_server.data_processing.dap_service import DAPServiceBase diff --git a/bec_server/tests/tests_device_server/conftest.py b/bec_server/tests/tests_device_server/conftest.py index c74429d3..937e843f 100644 --- a/bec_server/tests/tests_device_server/conftest.py +++ b/bec_server/tests/tests_device_server/conftest.py @@ -1,6 +1,6 @@ import pytest -from bec_lib import bec_logger +from bec_lib.logger import bec_logger ### THE NEXT FIXTURE HAS TO BE RE-ACTIVATED ONCE ### OPHYD "STATUS CALLBACKS" THREADS ARE CLEANED diff --git a/bec_server/tests/tests_device_server/test_device_manager_ds.py b/bec_server/tests/tests_device_server/test_device_manager_ds.py index cc08e3c4..e4af3b97 100644 --- a/bec_server/tests/tests_device_server/test_device_manager_ds.py +++ b/bec_server/tests/tests_device_server/test_device_manager_ds.py @@ -7,8 +7,8 @@ import numpy as np import pytest import yaml -import bec_lib -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_server.device_server.devices.devicemanager import DeviceManagerDS # pylint: disable=missing-function-docstring diff --git a/bec_server/tests/tests_device_server/test_device_server.py b/bec_server/tests/tests_device_server/test_device_server.py index 5117b777..55d0f758 100644 --- a/bec_server/tests/tests_device_server/test_device_server.py +++ b/bec_server/tests/tests_device_server/test_device_server.py @@ -5,9 +5,12 @@ import pytest from ophyd import Staged from ophyd.utils import errors as ophyd_errors -from bec_lib import Alarms, MessageEndpoints, ServiceConfig, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.endpoints import MessageEndpoints from bec_lib.messages import BECStatus from bec_lib.redis_connector import MessageObject +from bec_lib.service_config import ServiceConfig from bec_lib.tests.utils import ConnectorMock from bec_server.device_server import DeviceServer from bec_server.device_server.device_server import InvalidDeviceError diff --git a/bec_server/tests/tests_device_server/test_rpc_mixin.py b/bec_server/tests/tests_device_server/test_rpc_mixin.py index 38a6fc15..24ac4e89 100644 --- a/bec_server/tests/tests_device_server/test_rpc_mixin.py +++ b/bec_server/tests/tests_device_server/test_rpc_mixin.py @@ -5,7 +5,9 @@ from unittest import mock import pytest from ophyd import Device, Kind, Signal, Staged, StatusBase -from bec_lib import Alarms, MessageEndpoints, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.endpoints import MessageEndpoints from bec_server.device_server.rpc_mixin import RPCMixin diff --git a/bec_server/tests/tests_file_writer/conftest.py b/bec_server/tests/tests_file_writer/conftest.py index 663d9f61..495646f8 100644 --- a/bec_server/tests/tests_file_writer/conftest.py +++ b/bec_server/tests/tests_file_writer/conftest.py @@ -1,6 +1,6 @@ import pytest -from bec_lib import bec_logger +from bec_lib.logger import bec_logger # overwrite threads_check fixture from bec_lib, # to have it in autouse diff --git a/bec_server/tests/tests_file_writer/test_file_writer_manager.py b/bec_server/tests/tests_file_writer/test_file_writer_manager.py index 7957211a..932a8b59 100644 --- a/bec_server/tests/tests_file_writer/test_file_writer_manager.py +++ b/bec_server/tests/tests_file_writer/test_file_writer_manager.py @@ -6,9 +6,11 @@ import numpy as np import pytest import bec_lib -from bec_lib import MessageEndpoints, ServiceConfig, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_lib.logger import bec_logger from bec_lib.redis_connector import MessageObject +from bec_lib.service_config import ServiceConfig from bec_lib.tests.utils import ConnectorMock from bec_server.file_writer import FileWriterManager from bec_server.file_writer.file_writer import FileWriter diff --git a/bec_server/tests/tests_scan_bundler/conftest.py b/bec_server/tests/tests_scan_bundler/conftest.py index 5ab5bdaf..0091d40c 100644 --- a/bec_server/tests/tests_scan_bundler/conftest.py +++ b/bec_server/tests/tests_scan_bundler/conftest.py @@ -5,8 +5,10 @@ import pytest import yaml import bec_lib -from bec_lib import DeviceManagerBase, ServiceConfig, bec_logger, messages +from bec_lib.devicemanager import DeviceManagerBase +from bec_lib.logger import bec_logger from bec_lib.messages import BECStatus +from bec_lib.service_config import ServiceConfig from bec_lib.tests.utils import ConnectorMock from bec_server.scan_bundler import ScanBundler diff --git a/bec_server/tests/tests_scan_bundler/test_bec_emitter.py b/bec_server/tests/tests_scan_bundler/test_bec_emitter.py index 2ef0b469..fc59d86a 100644 --- a/bec_server/tests/tests_scan_bundler/test_bec_emitter.py +++ b/bec_server/tests/tests_scan_bundler/test_bec_emitter.py @@ -2,7 +2,8 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_server.scan_bundler.bec_emitter import BECEmitter diff --git a/bec_server/tests/tests_scan_bundler/test_bluesky_emitter.py b/bec_server/tests/tests_scan_bundler/test_bluesky_emitter.py index bf88e429..f14edbdb 100644 --- a/bec_server/tests/tests_scan_bundler/test_bluesky_emitter.py +++ b/bec_server/tests/tests_scan_bundler/test_bluesky_emitter.py @@ -3,7 +3,7 @@ from unittest import mock import msgpack import pytest -from bec_lib import MessageEndpoints +from bec_lib.endpoints import MessageEndpoints from bec_server.scan_bundler.bluesky_emitter import BlueskyEmitter diff --git a/bec_server/tests/tests_scan_bundler/test_scan_bundler.py b/bec_server/tests/tests_scan_bundler/test_scan_bundler.py index e2d90215..af957ed1 100644 --- a/bec_server/tests/tests_scan_bundler/test_scan_bundler.py +++ b/bec_server/tests/tests_scan_bundler/test_scan_bundler.py @@ -2,8 +2,9 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages from bec_lib.connector import MessageObject +from bec_lib.endpoints import MessageEndpoints # pylint: disable=missing-function-docstring # pylint: disable=protected-access diff --git a/bec_server/tests/tests_scan_server/conftest.py b/bec_server/tests/tests_scan_server/conftest.py index 663d9f61..495646f8 100644 --- a/bec_server/tests/tests_scan_server/conftest.py +++ b/bec_server/tests/tests_scan_server/conftest.py @@ -1,6 +1,6 @@ import pytest -from bec_lib import bec_logger +from bec_lib.logger import bec_logger # overwrite threads_check fixture from bec_lib, # to have it in autouse diff --git a/bec_server/tests/tests_scan_server/test_scan_guard.py b/bec_server/tests/tests_scan_server/test_scan_guard.py index 5a695b50..702ca711 100644 --- a/bec_server/tests/tests_scan_server/test_scan_guard.py +++ b/bec_server/tests/tests_scan_server/test_scan_guard.py @@ -2,7 +2,8 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_lib.redis_connector import MessageObject from bec_server.scan_server.scan_guard import ScanGuard, ScanRejection, ScanStatus from bec_server.scan_server.tests.fixtures import scan_server_mock diff --git a/bec_server/tests/tests_scan_server/test_scan_server_queue.py b/bec_server/tests/tests_scan_server/test_scan_server_queue.py index abfc2a8e..af3be0d5 100644 --- a/bec_server/tests/tests_scan_server/test_scan_server_queue.py +++ b/bec_server/tests/tests_scan_server/test_scan_server_queue.py @@ -3,7 +3,9 @@ from unittest import mock import pytest -from bec_lib import Alarms, MessageEndpoints, messages +from bec_lib import messages +from bec_lib.alarm_handler import Alarms +from bec_lib.endpoints import MessageEndpoints from bec_lib.redis_connector import MessageObject from bec_server.scan_server.scan_assembler import ScanAssembler from bec_server.scan_server.scan_queue import ( diff --git a/bec_server/tests/tests_scan_server/test_scan_stubs.py b/bec_server/tests/tests_scan_server/test_scan_stubs.py index b86ddfc6..b9dfa37f 100644 --- a/bec_server/tests/tests_scan_server/test_scan_stubs.py +++ b/bec_server/tests/tests_scan_server/test_scan_stubs.py @@ -3,7 +3,8 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_lib.tests.utils import ConnectorMock from bec_server.scan_server.errors import DeviceMessageError from bec_server.scan_server.scan_stubs import ScanAbortion, ScanStubs diff --git a/bec_server/tests/tests_scan_server/test_scan_worker.py b/bec_server/tests/tests_scan_server/test_scan_worker.py index fbec6833..e2fcfe39 100644 --- a/bec_server/tests/tests_scan_server/test_scan_worker.py +++ b/bec_server/tests/tests_scan_server/test_scan_worker.py @@ -4,7 +4,8 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_lib.tests.utils import ConnectorMock from bec_server.scan_server.errors import DeviceMessageError, ScanAbortion from bec_server.scan_server.scan_assembler import ScanAssembler diff --git a/bec_server/tests/tests_scihub/conftest.py b/bec_server/tests/tests_scihub/conftest.py index 16e02629..672b7c15 100644 --- a/bec_server/tests/tests_scihub/conftest.py +++ b/bec_server/tests/tests_scihub/conftest.py @@ -4,7 +4,7 @@ from py_scibec_openapi_client.models.dataset_with_relations import DatasetWithRe from py_scibec_openapi_client.models.experiment_with_relations import ExperimentWithRelations from py_scibec_openapi_client.models.scan_with_relations import ScanWithRelations -from bec_lib import bec_logger +from bec_lib.logger import bec_logger # overwrite threads_check fixture from bec_lib, # to have it in autouse diff --git a/bec_server/tests/tests_scihub/test_scibec_config_handler.py b/bec_server/tests/tests_scihub/test_scibec_config_handler.py index f0018450..f105fa46 100644 --- a/bec_server/tests/tests_scihub/test_scibec_config_handler.py +++ b/bec_server/tests/tests_scihub/test_scibec_config_handler.py @@ -8,9 +8,9 @@ from fastjsonschema import JsonSchemaException from test_scibec_connector import SciBecMock, SciHubMock import bec_lib -from bec_lib import DeviceBase, messages +from bec_lib import messages from bec_lib.bec_errors import DeviceConfigError -from bec_lib.device import OnFailure, ReadoutPriority +from bec_lib.device import DeviceBase, OnFailure, ReadoutPriority from bec_server.scihub import SciHub from bec_server.scihub.scibec import ConfigHandler, SciBecConnector diff --git a/bec_server/tests/tests_scihub/test_scibec_connector.py b/bec_server/tests/tests_scihub/test_scibec_connector.py index 00e2d4fa..95513b69 100644 --- a/bec_server/tests/tests_scihub/test_scibec_connector.py +++ b/bec_server/tests/tests_scihub/test_scibec_connector.py @@ -2,8 +2,10 @@ from unittest import mock import pytest -from bec_lib import MessageEndpoints, ServiceConfig, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_lib.messages import BECStatus +from bec_lib.service_config import ServiceConfig from bec_lib.tests.utils import ConnectorMock from bec_server.scihub import SciHub from bec_server.scihub.scibec import SciBecConnector diff --git a/bec_server/tests/tests_scihub/test_scilog_connector.py b/bec_server/tests/tests_scihub/test_scilog_connector.py index 2af3ff85..41075ac5 100644 --- a/bec_server/tests/tests_scihub/test_scilog_connector.py +++ b/bec_server/tests/tests_scihub/test_scilog_connector.py @@ -2,7 +2,8 @@ from unittest import mock from test_scibec_connector import SciHubMock -from bec_lib import MessageEndpoints, messages +from bec_lib import messages +from bec_lib.endpoints import MessageEndpoints from bec_server.scihub.scilog import SciLogConnector diff --git a/docs/source/developer/external_sources.md b/docs/source/developer/external_sources.md index 4da77013..d219fc0b 100644 --- a/docs/source/developer/external_sources.md +++ b/docs/source/developer/external_sources.md @@ -4,7 +4,9 @@ Large data sources typically have their own data pipeline, optimized for their s As of now, only external data sources that are based on HDF5 files are supported. BEC can be informed about new HDF5 files by emitting a [FileMessage](#bec_lib.messages.FileMessage) to the [public_file endpoint](#bec_lib.endpoints.MessageEndpoints.public_file), e.g. ```python -from bec_lib import MessageEndpoints, messages, RedisConnector +from bec_lib.endpoints import MessageEndpoints +from bec_lib import messages +from bec_lib.redis_connector import RedisConnector scan_id = "scan id of the current scan" diff --git a/docs/source/developer/logs.md b/docs/source/developer/logs.md index dfd206c5..f0fe7bc3 100644 --- a/docs/source/developer/logs.md +++ b/docs/source/developer/logs.md @@ -29,7 +29,7 @@ The log level can be set for each service and even each sink individually. While Using the logger in BEC is straightforward. The logger is already included in the BEC environment and can be imported via ```python -from bec_lib import bec_logger +from bec_lib.logger import bec_logger logger = bec_logger.logger ``` diff --git a/docs/source/developer/tests.md b/docs/source/developer/tests.md index 160d2e30..b88a01ab 100644 --- a/docs/source/developer/tests.md +++ b/docs/source/developer/tests.md @@ -59,7 +59,7 @@ It could be useful to automatically enable the threads check and `loguru` cleani following fixture to a `conftest.py` file with your new test files: ``` -from bec_lib import bec_logger +from bec_lib.logger import bec_logger def auto_check_threads(threads_check): yield bec_logger.logger.remove() diff --git a/pytest_bec_e2e/pytest_bec_e2e/plugin.py b/pytest_bec_e2e/pytest_bec_e2e/plugin.py index 4a4f1d85..f6eb6873 100644 --- a/pytest_bec_e2e/pytest_bec_e2e/plugin.py +++ b/pytest_bec_e2e/pytest_bec_e2e/plugin.py @@ -12,7 +12,10 @@ from pytest_redis import factories as pytest_redis_factories from redis import Redis from bec_ipython_client import BECIPythonClient -from bec_lib import BECClient, ConfigHelper, RedisConnector, ServiceConfig +from bec_lib.client import BECClient +from bec_lib.config_helper import ConfigHelper +from bec_lib.redis_connector import RedisConnector +from bec_lib.service_config import ServiceConfig from bec_lib.tests.utils import wait_for_empty_queue