fix: clean all imports from bec_lib, remove use of @threadlocked

This commit is contained in:
guijar_m 2024-05-08 14:39:02 +02:00 committed by guijar_m
parent 649502e364
commit 8a017ef3d7
92 changed files with 342 additions and 242 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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):

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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"]

View File

@ -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

View File

@ -1,3 +1,5 @@
from __future__ import annotations
import enum
import time
import warnings

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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])

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:
"""

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"""

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 (

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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
```

View File

@ -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()

View File

@ -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