refactor!: moved services to bec_server

All services are now in the bec_server package. This is a breaking change as the standalone import of the services will no longer work.
This commit is contained in:
wakonig_k 2024-04-07 20:12:00 +02:00
parent 2a7a93ef6e
commit 405d12e74a
141 changed files with 312 additions and 1318 deletions

View File

@ -39,15 +39,6 @@ stages:
- Build - Build
- Deploy - Deploy
.install-bec-services: &install-bec-services
- pip install -e ./device_server
- pip install -e ./scan_server
- pip install -e ./scan_bundler
- pip install -e ./bec_client
- pip install -e ./file_writer
- pip install -e ./scihub
- pip install -e ./data_processing
.install-bec-services-dev: &install-bec-services-dev .install-bec-services-dev: &install-bec-services-dev
- pip install wheel - pip install wheel
- pip install -e ./bec_server[dev] - pip install -e ./bec_server[dev]
@ -69,7 +60,7 @@ pylint:
- pip install pylint pylint-exit anybadge - pip install pylint pylint-exit anybadge
script: script:
- mkdir ./pylint - mkdir ./pylint
- pylint ./data_processing/data_processing ./bec_lib/bec_lib ./scan_server/scan_server ./device_server/device_server ./scan_bundler/scan_bundler ./bec_client/bec_client ./file_writer/file_writer --output-format=text | tee ./pylint/pylint.log || pylint-exit $? - pylint ./bec_server/bec_server ./bec_lib/bec_lib ./bec_client/bec_client --output-format=text | tee ./pylint/pylint.log || pylint-exit $?
- PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log) - PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)
- anybadge --label=Pylint --file=pylint/pylint.svg --value=$PYLINT_SCORE 2=red 4=orange 8=yellow 10=green - anybadge --label=Pylint --file=pylint/pylint.svg --value=$PYLINT_SCORE 2=red 4=orange 8=yellow 10=green
- echo "Pylint score is $PYLINT_SCORE" - echo "Pylint score is $PYLINT_SCORE"
@ -123,7 +114,7 @@ tests:
- apt-get install -y gcc - apt-get install -y gcc
- apt-get install -y redis - apt-get install -y redis
- *install-bec-services-dev - *install-bec-services-dev
- coverage run --source=./data_processing/data_processing,./bec_lib/bec_lib,./device_server/device_server,./scan_server/scan_server,./scan_bundler/scan_bundler,./bec_client/bec_client,./file_writer/file_writer,./scihub/scihub --omit=*/bec_client/bec_client/plugins/*,*/bec_client/scripts/*,./bec_lib/bec_lib/tests -m pytest -v --junitxml=report.xml --random-order ./data_processing/tests ./scan_server/tests ./device_server/tests ./scan_bundler/tests ./bec_client/tests/client_tests ./file_writer/tests ./scihub/tests ./bec_lib/tests - coverage run --source=./bec_server/bec_server,./bec_lib/bec_lib,./bec_client/bec_client, --omit=*/bec_server/scan_server/scan_plugins/*,*/bec_client/bec_client/plugins/*,*/bec_client/scripts/*,./bec_lib/bec_lib/tests -m pytest -v --junitxml=report.xml --random-order ./bec_server/tests ./bec_client/tests/client_tests ./bec_lib/tests
- coverage report - coverage report
- coverage xml - coverage xml
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
@ -147,7 +138,7 @@ tests-3.11:
- apt-get install -y gcc - apt-get install -y gcc
- apt-get install -y redis - apt-get install -y redis
- *install-bec-services-dev - *install-bec-services-dev
- pytest -v --junitxml=report.xml --random-order ./data_processing/tests ./bec_lib/tests ./scan_server/tests ./device_server/tests ./scan_bundler/tests ./bec_client/tests/client_tests ./file_writer/tests ./scihub/tests - pytest -v --junitxml=report.xml --random-order ./bec_server/tests ./bec_lib/tests ./bec_client/tests/client_tests
tests-3.12: tests-3.12:
extends: "tests-3.11" extends: "tests-3.11"

View File

@ -167,15 +167,13 @@ def bec_servers(
) )
if _start_servers: if _start_servers:
from bec_server.service_handler import ServiceHandler from bec_server.bec_server_utils.service_handler import ServiceHandler
# Start all BEC servers, kill them at the end # Start all BEC servers, kill them at the end
# when no_tmux=True, 'bec_path' indicate the cwd # when no_tmux=True, 'bec_path' indicate the cwd
# for the process (working directory), i.e. where log files will go # for the process (working directory), i.e. where log files will go
service_handler = ServiceHandler( service_handler = ServiceHandler(
bec_path=bec_files_path, bec_path=bec_files_path, config_path=bec_services_config_file_path, no_tmux=True
config_path=bec_services_config_file_path,
no_tmux=True,
) )
processes = service_handler.start() processes = service_handler.start()
try: try:

View File

@ -26,7 +26,7 @@ but they are executed in a specific order:
# import numpy as np # import numpy as np
# from bec_lib import MessageEndpoints, bec_logger, messages # from bec_lib import MessageEndpoints, bec_logger, messages
# from scan_server.errors import ScanAbortion # from bec_server.scan_server.errors import ScanAbortion
# from scan_server.scans import FlyScanBase, RequestBase, ScanArgType, ScanBase # from bec_server.scan_server.scans import FlyScanBase, RequestBase, ScanArgType, ScanBase
# logger = bec_logger.logger # logger = bec_logger.logger

View File

@ -1 +1 @@
from .launch import main from .bec_server_utils.launch import main

View File

@ -3,7 +3,7 @@ import os
import libtmux import libtmux
from bec_server.service_handler import ServiceHandler from bec_server.bec_server_utils.service_handler import ServiceHandler
def main(): def main():

View File

@ -1,8 +1,8 @@
import sys import sys
from string import Template from string import Template
from bec_server.subprocess_launch import subprocess_start, subprocess_stop from bec_server.bec_server_utils.subprocess_launch import subprocess_start, subprocess_stop
from bec_server.tmux_launch import tmux_start, tmux_stop from bec_server.bec_server_utils.tmux_launch import tmux_start, tmux_stop
class bcolors: class bcolors:
@ -28,10 +28,7 @@ class ServiceHandler:
""" """
SERVICES = { SERVICES = {
"scan_server": { "scan_server": {"path": Template("$base_path/scan_server"), "command": "bec-scan-server"},
"path": Template("$base_path/scan_server"),
"command": "bec-scan-server",
},
"scan_bundler": { "scan_bundler": {
"path": Template("$base_path/scan_bundler"), "path": Template("$base_path/scan_bundler"),
"command": "bec-scan-bundler", "command": "bec-scan-bundler",

View File

@ -1,9 +1,9 @@
import argparse import argparse
import threading import threading
import data_processing import bec_server.data_processing as data_processing
from bec_lib import RedisConnector, ServiceConfig, bec_logger from bec_lib import RedisConnector, ServiceConfig, bec_logger
from data_processing.lmfit1d_service import LmfitService1D from bec_server.data_processing.lmfit1d_service import LmfitService1D
logger = bec_logger.logger logger = bec_logger.logger
bec_logger.level = bec_logger.LOGLEVEL.INFO bec_logger.level = bec_logger.LOGLEVEL.INFO

View File

@ -11,7 +11,7 @@ import numpy as np
from bec_lib import DeviceBase, MessageEndpoints, bec_logger, messages from bec_lib import DeviceBase, MessageEndpoints, bec_logger, messages
from bec_lib.lmfit_serializer import deserialize_param_object, serialize_lmfit_params from bec_lib.lmfit_serializer import deserialize_param_object, serialize_lmfit_params
from bec_lib.serialization import MsgpackSerialization from bec_lib.serialization import MsgpackSerialization
from data_processing.dap_service import DAPError, DAPServiceBase from bec_server.data_processing.dap_service import DAPError, DAPServiceBase
if TYPE_CHECKING: if TYPE_CHECKING:
from bec_lib.scan_items import ScanItem from bec_lib.scan_items import ScanItem

View File

@ -15,8 +15,8 @@ if startup is not None:
import argparse import argparse
import threading import threading
import device_server
from bec_lib import RedisConnector, ServiceConfig, bec_logger from bec_lib import RedisConnector, ServiceConfig, bec_logger
from bec_server import device_server
logger = bec_logger.logger logger = bec_logger.logger
bec_logger.level = bec_logger.LOGLEVEL.INFO bec_logger.level = bec_logger.LOGLEVEL.INFO
@ -27,11 +27,7 @@ def main():
Launch the BEC device server. Launch the BEC device server.
""" """
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument( parser.add_argument("--config", default="", help="path to the config file")
"--config",
default="",
help="path to the config file",
)
clargs = parser.parse_args() clargs = parser.parse_args()
config_path = clargs.config config_path = clargs.config

View File

@ -12,8 +12,8 @@ from bec_lib import Alarms, BECService, MessageEndpoints, bec_logger, messages
from bec_lib.connector import ConnectorBase from bec_lib.connector import ConnectorBase
from bec_lib.device import OnFailure from bec_lib.device import OnFailure
from bec_lib.messages import BECStatus from bec_lib.messages import BECStatus
from device_server.devices.devicemanager import DeviceManagerDS from bec_server.device_server.devices.devicemanager import DeviceManagerDS
from device_server.rpc_mixin import RPCMixin from bec_server.device_server.rpc_mixin import RPCMixin
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -28,8 +28,8 @@ from bec_lib import (
bec_logger, bec_logger,
messages, messages,
) )
from device_server.devices.config_update_handler import ConfigUpdateHandler from bec_server.device_server.devices.config_update_handler import ConfigUpdateHandler
from device_server.devices.device_serializer import get_device_info from bec_server.device_server.devices.device_serializer import get_device_info
try: try:
from bec_plugins import devices as plugin_devices from bec_plugins import devices as plugin_devices

View File

@ -6,7 +6,7 @@ from typing import Any
import ophyd import ophyd
from bec_lib import Alarms, MessageEndpoints, bec_logger, messages from bec_lib import Alarms, MessageEndpoints, bec_logger, messages
from device_server.devices import is_serializable, rgetattr from bec_server.device_server.devices import is_serializable, rgetattr
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -2,8 +2,8 @@ import argparse
import os import os
import threading import threading
import file_writer
from bec_lib import RedisConnector, ServiceConfig, bec_logger from bec_lib import RedisConnector, ServiceConfig, bec_logger
from bec_server import file_writer
logger = bec_logger.logger logger = bec_logger.logger
bec_logger.level = bec_logger.LOGLEVEL.INFO bec_logger.level = bec_logger.LOGLEVEL.INFO
@ -14,11 +14,7 @@ def main():
Launch the file writer. Launch the file writer.
""" """
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument( parser.add_argument("--config", default="", help="path to the config file")
"--config",
default="",
help="path to the config file",
)
clargs = parser.parse_args() clargs = parser.parse_args()
config_path = clargs.config config_path = clargs.config

View File

@ -7,10 +7,10 @@ import os
import traceback import traceback
import typing import typing
import file_writer_plugins as fwp
import h5py import h5py
import xmltodict import xmltodict
import bec_server.file_writer_plugins as fwp
from bec_lib import MessageEndpoints, bec_logger, messages from bec_lib import MessageEndpoints, bec_logger, messages
from .merged_dicts import merge_dicts from .merged_dicts import merge_dicts

View File

@ -16,7 +16,7 @@ from bec_lib.alarm_handler import Alarms
from bec_lib.async_data import AsyncDataHandler from bec_lib.async_data import AsyncDataHandler
from bec_lib.file_utils import FileWriter from bec_lib.file_utils import FileWriter
from bec_lib.redis_connector import MessageObject, RedisConnector from bec_lib.redis_connector import MessageObject, RedisConnector
from file_writer.file_writer import NexusFileWriter from bec_server.file_writer.file_writer import NexusFileWriter
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -6,7 +6,7 @@ import numpy as np
if TYPE_CHECKING: if TYPE_CHECKING:
from bec_lib import DeviceManagerBase from bec_lib import DeviceManagerBase
from file_writer.file_writer import HDF5Storage from bec_server.file_writer.file_writer import HDF5Storage
def get_entry(data: dict, name: str, default=None) -> Any: def get_entry(data: dict, name: str, default=None) -> Any:
@ -25,10 +25,7 @@ def get_entry(data: dict, name: str, default=None) -> Any:
def NeXus_format( def NeXus_format(
storage: HDF5Storage, storage: HDF5Storage, data: dict, file_references: dict, device_manager: DeviceManagerBase
data: dict,
file_references: dict,
device_manager: DeviceManagerBase,
) -> HDF5Storage: ) -> HDF5Storage:
""" """
Prepare the NeXus file format. Prepare the NeXus file format.
@ -155,8 +152,7 @@ def NeXus_format(
if isinstance(mokev, list): if isinstance(mokev, list):
mokev = mokev[0] mokev = mokev[0]
wavelength = mono.create_dataset( wavelength = mono.create_dataset(
name="wavelength", name="wavelength", data=12.3984193 / (mokev.get("mokev").get("value") + 1e-9)
data=12.3984193 / (mokev.get("mokev").get("value") + 1e-9),
) )
wavelength.attrs["units"] = "Angstrom" wavelength.attrs["units"] = "Angstrom"
energy = mono.create_dataset(name="energy", data=mokev.get("mokev").get("value")) energy = mono.create_dataset(name="energy", data=mokev.get("mokev").get("value"))
@ -195,22 +191,19 @@ def NeXus_format(
xbpm4_x_data = xbpm4_x.create_dataset(name="data", data=get_entry(data, "bpm4x")) xbpm4_x_data = xbpm4_x.create_dataset(name="data", data=get_entry(data, "bpm4x"))
xbpm4_x_data.attrs["units"] = "NX_DIMENSIONLESS" xbpm4_x_data.attrs["units"] = "NX_DIMENSIONLESS"
xbpm4_x.create_dataset( xbpm4_x.create_dataset(
name="description", name="description", data="Normalized difference of counts between left and right quadrants."
data="Normalized difference of counts between left and right quadrants.",
) )
xbpm4_y = xbpm4.create_group("XBPM4_y") xbpm4_y = xbpm4.create_group("XBPM4_y")
xbpm4_y_data = xbpm4_y.create_dataset(name="data", data=get_entry(data, "bpm4y")) xbpm4_y_data = xbpm4_y.create_dataset(name="data", data=get_entry(data, "bpm4y"))
xbpm4_y_data.attrs["units"] = "NX_DIMENSIONLESS" xbpm4_y_data.attrs["units"] = "NX_DIMENSIONLESS"
xbpm4_y.create_dataset( xbpm4_y.create_dataset(
name="description", name="description", data="Normalized difference of counts between high and low quadrants."
data="Normalized difference of counts between high and low quadrants.",
) )
xbpm4_skew = xbpm4.create_group("XBPM4_skew") xbpm4_skew = xbpm4.create_group("XBPM4_skew")
xbpm4_skew_data = xbpm4_skew.create_dataset(name="data", data=get_entry(data, "bpm4z")) xbpm4_skew_data = xbpm4_skew.create_dataset(name="data", data=get_entry(data, "bpm4z"))
xbpm4_skew_data.attrs["units"] = "NX_DIMENSIONLESS" xbpm4_skew_data.attrs["units"] = "NX_DIMENSIONLESS"
xbpm4_skew.create_dataset( xbpm4_skew.create_dataset(
name="description", name="description", data="Normalized difference of counts between diagonal quadrants."
data="Normalized difference of counts between diagonal quadrants.",
) )
mirror = instrument.create_group("mirror") mirror = instrument.create_group("mirror")
@ -243,22 +236,19 @@ def NeXus_format(
xbpm5_x_data = xbpm5_x.create_dataset(name="data", data=get_entry(data, "bpm5x")) xbpm5_x_data = xbpm5_x.create_dataset(name="data", data=get_entry(data, "bpm5x"))
xbpm5_x_data.attrs["units"] = "NX_DIMENSIONLESS" xbpm5_x_data.attrs["units"] = "NX_DIMENSIONLESS"
xbpm5_x.create_dataset( xbpm5_x.create_dataset(
name="description", name="description", data="Normalized difference of counts between left and right quadrants."
data="Normalized difference of counts between left and right quadrants.",
) )
xbpm5_y = xbpm5.create_group("XBPM5_y") xbpm5_y = xbpm5.create_group("XBPM5_y")
xbpm5_y_data = xbpm5_y.create_dataset(name="data", data=get_entry(data, "bpm5y")) xbpm5_y_data = xbpm5_y.create_dataset(name="data", data=get_entry(data, "bpm5y"))
xbpm5_y_data.attrs["units"] = "NX_DIMENSIONLESS" xbpm5_y_data.attrs["units"] = "NX_DIMENSIONLESS"
xbpm5_y.create_dataset( xbpm5_y.create_dataset(
name="description", name="description", data="Normalized difference of counts between high and low quadrants."
data="Normalized difference of counts between high and low quadrants.",
) )
xbpm5_skew = xbpm5.create_group("XBPM5_skew") xbpm5_skew = xbpm5.create_group("XBPM5_skew")
xbpm5_skew_data = xbpm5_skew.create_dataset(name="data", data=get_entry(data, "bpm5z")) xbpm5_skew_data = xbpm5_skew.create_dataset(name="data", data=get_entry(data, "bpm5z"))
xbpm5_skew_data.attrs["units"] = "NX_DIMENSIONLESS" xbpm5_skew_data.attrs["units"] = "NX_DIMENSIONLESS"
xbpm5_skew.create_dataset( xbpm5_skew.create_dataset(
name="description", name="description", data="Normalized difference of counts between diagonal quadrants."
data="Normalized difference of counts between diagonal quadrants.",
) )
slit_2 = instrument.create_group("slit_2") slit_2 = instrument.create_group("slit_2")
@ -373,8 +363,7 @@ def NeXus_format(
rotation_angle = eiger_4.create_dataset(name="rotation_angle", data=0) rotation_angle = eiger_4.create_dataset(name="rotation_angle", data=0)
rotation_angle.attrs["units"] = "degrees" rotation_angle.attrs["units"] = "degrees"
description = eiger_4.create_dataset( description = eiger_4.create_dataset(
name="description", name="description", data="Single-photon counting detector, 320 micron-thick Si chip"
data="Single-photon counting detector, 320 micron-thick Si chip",
) )
orientation = eiger_4.create_group("orientation") orientation = eiger_4.create_group("orientation")
orientation.attrs["description"] = ( orientation.attrs["description"] = (
@ -401,8 +390,7 @@ def NeXus_format(
rotation_angle = eiger9m.create_dataset(name="rotation_angle", data=0) rotation_angle = eiger9m.create_dataset(name="rotation_angle", data=0)
rotation_angle.attrs["units"] = "degrees" rotation_angle.attrs["units"] = "degrees"
description = eiger9m.create_dataset( description = eiger9m.create_dataset(
name="description", name="description", data="Eiger9M detector, in-house developed, Paul Scherrer Institute"
data="Eiger9M detector, in-house developed, Paul Scherrer Institute",
) )
orientation = eiger9m.create_group("orientation") orientation = eiger9m.create_group("orientation")
orientation.attrs["description"] = ( orientation.attrs["description"] = (
@ -442,9 +430,7 @@ def NeXus_format(
orientation.create_dataset(name="transpose", data=1) orientation.create_dataset(name="transpose", data=1)
orientation.create_dataset(name="rot90", data=2) orientation.create_dataset(name="rot90", data=2)
data = pilatus_2.create_ext_link( data = pilatus_2.create_ext_link(
"data", "data", file_references["pilatus_2"]["path"], "entry/instrument/pilatus_2/data"
file_references["pilatus_2"]["path"],
"entry/instrument/pilatus_2/data",
) )
if ( if (
@ -453,9 +439,7 @@ def NeXus_format(
and "falcon" in file_references and "falcon" in file_references
): ):
falcon = instrument.create_ext_link( falcon = instrument.create_ext_link(
"falcon", "falcon", file_references["falcon"]["path"], "entry/instrument/FalconX1"
file_references["falcon"]["path"],
"entry/instrument/FalconX1",
) )
return storage return storage

View File

@ -4,14 +4,11 @@ from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from bec_lib import DeviceManagerBase from bec_lib import DeviceManagerBase
from file_writer.file_writer import HDF5Storage from bec_server.file_writer.file_writer import HDF5Storage
def NeXus_format( def NeXus_format(
storage: HDF5Storage, storage: HDF5Storage, data: dict, file_references: dict, device_manager: DeviceManagerBase
data: dict,
file_references: dict,
device_manager: DeviceManagerBase,
) -> HDF5Storage: ) -> HDF5Storage:
""" """
Prepare the NeXus file format. Prepare the NeXus file format.

View File

@ -1,8 +1,8 @@
import argparse import argparse
import threading import threading
import scan_bundler
from bec_lib import RedisConnector, ServiceConfig, bec_logger from bec_lib import RedisConnector, ServiceConfig, bec_logger
from bec_server import scan_bundler
logger = bec_logger.logger logger = bec_logger.logger
bec_logger.level = bec_logger.LOGLEVEL.INFO bec_logger.level = bec_logger.LOGLEVEL.INFO
@ -13,11 +13,7 @@ def main():
Launch the scan bundler. Launch the scan bundler.
""" """
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument( parser.add_argument("--config", default="", help="path to the config file")
"--config",
default="",
help="path to the config file",
)
clargs = parser.parse_args() clargs = parser.parse_args()
config_path = clargs.config config_path = clargs.config

View File

@ -1,8 +1,8 @@
import argparse import argparse
import threading import threading
import scan_server
from bec_lib import RedisConnector, ServiceConfig, bec_logger from bec_lib import RedisConnector, ServiceConfig, bec_logger
from bec_server import scan_server
logger = bec_logger.logger logger = bec_logger.logger
bec_logger.level = bec_logger.LOGLEVEL.INFO bec_logger.level = bec_logger.LOGLEVEL.INFO
@ -13,20 +13,13 @@ def main():
Launch the scan server. Launch the scan server.
""" """
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument( parser.add_argument("--config", default="", help="path to the config file")
"--config",
default="",
help="path to the config file",
)
clargs = parser.parse_args() clargs = parser.parse_args()
config_path = clargs.config config_path = clargs.config
config = ServiceConfig(config_path) config = ServiceConfig(config_path)
bec_server = scan_server.scan_server.ScanServer( bec_server = scan_server.scan_server.ScanServer(config=config, connector_cls=RedisConnector)
config=config,
connector_cls=RedisConnector,
)
try: try:
event = threading.Event() event = threading.Event()
# pylint: disable=E1102 # pylint: disable=E1102

View File

@ -25,8 +25,8 @@ import time
import numpy as np import numpy as np
from bec_lib import MessageEndpoints, bec_logger from bec_lib import MessageEndpoints, bec_logger
from scan_server.errors import ScanAbortion from bec_server.scan_server.errors import ScanAbortion
from scan_server.scans import RequestBase, ScanArgType, ScanBase from bec_server.scan_server.scans import RequestBase, ScanArgType, ScanBase
MOVEMENT_SCALE_X = np.sin(np.radians(15)) * np.cos(np.radians(30)) MOVEMENT_SCALE_X = np.sin(np.radians(15)) * np.cos(np.radians(30))
MOVEMENT_SCALE_Y = np.cos(np.radians(15)) MOVEMENT_SCALE_Y = np.cos(np.radians(15))

View File

@ -25,8 +25,8 @@ import time
import numpy as np import numpy as np
from bec_lib import MessageEndpoints, bec_logger, messages from bec_lib import MessageEndpoints, bec_logger, messages
from scan_server.errors import ScanAbortion from bec_server.scan_server.errors import ScanAbortion
from scan_server.scans import SyncFlyScanBase from bec_server.scan_server.scans import SyncFlyScanBase
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -1,7 +1,7 @@
import time import time
from bec_lib import bec_logger from bec_lib import bec_logger
from scan_server.scans import ScanArgType, ScanBase, SyncFlyScanBase from bec_server.scan_server.scans import ScanArgType, ScanBase, SyncFlyScanBase
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -23,7 +23,7 @@ but they are executed in a specific order:
import time import time
from bec_lib import MessageEndpoints, bec_logger from bec_lib import MessageEndpoints, bec_logger
from scan_server.scans import AsyncFlyScanBase, ScanAbortion from bec_server.scan_server.scans import AsyncFlyScanBase, ScanAbortion
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -23,7 +23,7 @@ but they are executed in a specific order:
import time import time
from bec_lib import MessageEndpoints, bec_logger from bec_lib import MessageEndpoints, bec_logger
from scan_server.scans import AsyncFlyScanBase from bec_server.scan_server.scans import AsyncFlyScanBase
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -1,8 +1,8 @@
import argparse import argparse
import threading import threading
import scihub
from bec_lib import RedisConnector, ServiceConfig, bec_logger from bec_lib import RedisConnector, ServiceConfig, bec_logger
from bec_server import scihub
logger = bec_logger.logger logger = bec_logger.logger
bec_logger.level = bec_logger.LOGLEVEL.INFO bec_logger.level = bec_logger.LOGLEVEL.INFO
@ -14,11 +14,7 @@ def main():
""" """
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument( parser.add_argument("--config", default="", help="path to the config file")
"--config",
default="",
help="path to the config file",
)
clargs = parser.parse_args() clargs = parser.parse_args()
config_path = clargs.config config_path = clargs.config

View File

@ -15,7 +15,7 @@ from bec_lib.scibec_validator import SciBecValidator
if TYPE_CHECKING: if TYPE_CHECKING:
from bec_lib.device import DeviceBase from bec_lib.device import DeviceBase
from scihub.scibec.scibec_connector import SciBecConnector from bec_server.scihub.scibec.scibec_connector import SciBecConnector
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -8,13 +8,13 @@ from py_scibec import SciBecCore
from bec_lib import MessageEndpoints, bec_logger, messages from bec_lib import MessageEndpoints, bec_logger, messages
from bec_lib.connector import ConnectorBase from bec_lib.connector import ConnectorBase
from scihub.repeated_timer import RepeatedTimer from bec_server.scihub.repeated_timer import RepeatedTimer
from .config_handler import ConfigHandler from .config_handler import ConfigHandler
from .scibec_metadata_handler import SciBecMetadataHandler from .scibec_metadata_handler import SciBecMetadataHandler
if TYPE_CHECKING: if TYPE_CHECKING:
from scihub import SciHub from bec_server.scihub import SciHub
logger = bec_logger.logger logger = bec_logger.logger

View File

@ -13,7 +13,7 @@ logger = bec_logger.logger
if TYPE_CHECKING: if TYPE_CHECKING:
from bec_lib import messages from bec_lib import messages
from scihub.scibec import SciBecConnector from bec_server.scihub.scibec import SciBecConnector
class SciBecMetadataHandler: class SciBecMetadataHandler:

View File

@ -1,7 +1,7 @@
from bec_lib import BECService, BECStatus, ServiceConfig from bec_lib import BECService, BECStatus, ServiceConfig
from bec_lib.connector import ConnectorBase from bec_lib.connector import ConnectorBase
from scihub.scibec import SciBecConnector from bec_server.scihub.scibec import SciBecConnector
from scihub.scilog import SciLogConnector from bec_server.scihub.scilog import SciLogConnector
class SciHub(BECService): class SciHub(BECService):

View File

@ -7,12 +7,12 @@ import requests
from dotenv import dotenv_values from dotenv import dotenv_values
from bec_lib import MessageEndpoints, RedisConnector, bec_logger, messages from bec_lib import MessageEndpoints, RedisConnector, bec_logger, messages
from scihub.repeated_timer import RepeatedTimer from bec_server.scihub.repeated_timer import RepeatedTimer
logger = bec_logger.logger logger = bec_logger.logger
if TYPE_CHECKING: if TYPE_CHECKING:
from scihub import SciHub from bec_server.scihub import SciHub
class SciLogConnector: class SciLogConnector:

View File

@ -1,7 +1,4 @@
import os
import pathlib import pathlib
import subprocess
import sys
from setuptools import setup from setuptools import setup
@ -10,56 +7,46 @@ current_path = pathlib.Path(__file__).parent.resolve()
__version__ = "1.24.1" __version__ = "1.24.1"
def run_install(setup_args: dict, bec_deps: list, editable=False):
"""
Run the setup function with the given arguments.
Args:
setup_args (dict): Arguments for the setup function.
bec_deps (list): List of tuples with the dependencies of the BEC server.
editable (bool, optional): If True, the dependencies are installed in editable mode. Defaults to False.
"""
if editable:
# check if "[dev]" was requested
if "dev" in os.environ.get("EXTRAS_REQUIRE", ""):
suffix = "[dev]"
else:
suffix = ""
setup(**setup_args)
deps = [f"{current_path}/../{dep[1]}/" for dep in bec_deps]
for dep in deps:
subprocess.run(f"pip install -e {dep}{suffix}", shell=True, check=True)
return
install_deps = [dep[0] for dep in bec_deps]
setup_args["install_requires"].extend(install_deps)
print(setup_args)
setup(**setup_args)
if __name__ == "__main__": if __name__ == "__main__":
bec_deps_in = [ setup(
("bec_lib", "bec_lib"), install_requires=[
("bec_ipython_client", "bec_client"), "bec-lib",
("bec_scan_server", "scan_server"), "cytoolz",
("bec_scan_bundler", "scan_bundler"), "h5py",
("bec_file_writer", "file_writer"), "libtmux",
("bec_dap", "data_processing"), "lmfit",
("bec_device_server", "device_server"), "msgpack",
("bec_scihub", "scihub"), "numpy",
"ophyd",
"ophyd_devices",
"pydantic",
"py-scibec",
"pyyaml",
"python-dotenv",
"rich",
"xmltodict",
],
extras_require={
"dev": [
"black",
"coverage",
"isort",
"pytest",
"pytest-random-order",
"pylint",
"pytest-timeout",
] ]
setup_args_in = {
"entry_points": {"console_scripts": ["bec-server = bec_server:main"]},
"install_requires": ["libtmux"],
"version": __version__,
"extras_require": {
"dev": ["pytest", "pytest-random-order", "coverage", "black", "isort", "pylint"]
}, },
} entry_points={
"console_scripts": [
is_local = os.path.dirname(os.path.abspath(__file__)).split("/")[-1] == "bec_server" "bec-dap = bec_server.data_processing:main",
is_build = "bdist_wheel" in sys.argv "bec-device-server = bec_server.device_server:main",
"bec-file-writer = bec_server.file_writer:main",
editable_in = is_local and not is_build "bec-scan-server = bec_server.scan_server:main",
run_install(setup_args_in, bec_deps_in, editable=editable_in) "bec-scan-bundler = bec_server.scan_bundler:main",
"bec-scihub = bec_server.scihub:main",
"bec-server = bec_server:main",
]
},
version=__version__,
)

View File

@ -1,11 +1,11 @@
from unittest import mock from unittest import mock
from bec_server.launch import main from bec_server.bec_server_utils.launch import main
def test_main_start(): def test_main_start():
with mock.patch("bec_server.launch.ServiceHandler") as mock_service_handler: with mock.patch("bec_server.bec_server_utils.launch.ServiceHandler") as mock_service_handler:
with mock.patch("bec_server.launch.argparse") as mock_argparse: with mock.patch("bec_server.bec_server_utils.launch.argparse") as mock_argparse:
mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock( mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock(
command="start", config=None command="start", config=None
) )
@ -17,8 +17,8 @@ def test_main_start():
def test_main_stop(): def test_main_stop():
with mock.patch("bec_server.launch.ServiceHandler") as mock_service_handler: with mock.patch("bec_server.bec_server_utils.launch.ServiceHandler") as mock_service_handler:
with mock.patch("bec_server.launch.argparse") as mock_argparse: with mock.patch("bec_server.bec_server_utils.launch.argparse") as mock_argparse:
mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock( mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock(
command="stop", config=None command="stop", config=None
) )
@ -30,8 +30,8 @@ def test_main_stop():
def test_main_restart(): def test_main_restart():
with mock.patch("bec_server.launch.ServiceHandler") as mock_service_handler: with mock.patch("bec_server.bec_server_utils.launch.ServiceHandler") as mock_service_handler:
with mock.patch("bec_server.launch.argparse") as mock_argparse: with mock.patch("bec_server.bec_server_utils.launch.argparse") as mock_argparse:
mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock( mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock(
command="restart", config=None command="restart", config=None
) )
@ -43,8 +43,8 @@ def test_main_restart():
def test_main_start_with_config(): def test_main_start_with_config():
with mock.patch("bec_server.launch.ServiceHandler") as mock_service_handler: with mock.patch("bec_server.bec_server_utils.launch.ServiceHandler") as mock_service_handler:
with mock.patch("bec_server.launch.argparse") as mock_argparse: with mock.patch("bec_server.bec_server_utils.launch.argparse") as mock_argparse:
mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock( mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock(
command="start", config="/path/to/config" command="start", config="/path/to/config"
) )
@ -56,8 +56,8 @@ def test_main_start_with_config():
def test_main_restart_with_config(): def test_main_restart_with_config():
with mock.patch("bec_server.launch.ServiceHandler") as mock_service_handler: with mock.patch("bec_server.bec_server_utils.launch.ServiceHandler") as mock_service_handler:
with mock.patch("bec_server.launch.argparse") as mock_argparse: with mock.patch("bec_server.bec_server_utils.launch.argparse") as mock_argparse:
mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock( mock_argparse.ArgumentParser().parse_args.return_value = mock.MagicMock(
command="restart", config="/path/to/config" command="restart", config="/path/to/config"
) )

View File

@ -1,13 +1,13 @@
from unittest import mock from unittest import mock
from bec_server.service_handler import ServiceHandler from bec_server.bec_server_utils.service_handler import ServiceHandler
def test_service_handler(): def test_service_handler():
bec_path = "/path/to/bec" bec_path = "/path/to/bec"
config_path = "/path/to/config" config_path = "/path/to/config"
with mock.patch("bec_server.service_handler.sys") as mock_sys: with mock.patch("bec_server.bec_server_utils.service_handler.sys") as mock_sys:
mock_sys.platform = "linux" mock_sys.platform = "linux"
service_handler = ServiceHandler(bec_path, config_path) service_handler = ServiceHandler(bec_path, config_path)
assert service_handler.interface == "tmux" assert service_handler.interface == "tmux"
@ -17,17 +17,19 @@ def test_service_handler_start():
bec_path = "/path/to/bec" bec_path = "/path/to/bec"
config_path = "/path/to/config" config_path = "/path/to/config"
with mock.patch("bec_server.service_handler.sys") as mock_sys: with mock.patch("bec_server.bec_server_utils.service_handler.sys") as mock_sys:
mock_sys.platform = "linux" mock_sys.platform = "linux"
service_handler = ServiceHandler(bec_path, config_path) service_handler = ServiceHandler(bec_path, config_path)
with mock.patch("bec_server.service_handler.tmux_start") as mock_tmux_start: with mock.patch(
"bec_server.bec_server_utils.service_handler.tmux_start"
) as mock_tmux_start:
service_handler.start() service_handler.start()
mock_tmux_start.assert_called_once_with(bec_path, config_path, service_handler.SERVICES) mock_tmux_start.assert_called_once_with(bec_path, config_path, service_handler.SERVICES)
def test_service_handler_stop(): def test_service_handler_stop():
with mock.patch("bec_server.service_handler.tmux_stop") as mock_tmux_stop: with mock.patch("bec_server.bec_server_utils.service_handler.tmux_stop") as mock_tmux_stop:
service_handler = ServiceHandler("/path/to/bec", "/path/to/config") service_handler = ServiceHandler("/path/to/bec", "/path/to/config")
service_handler.stop() service_handler.stop()
mock_tmux_stop.assert_called_once() mock_tmux_stop.assert_called_once()
@ -37,12 +39,14 @@ def test_service_handler_restart():
bec_path = "/path/to/bec" bec_path = "/path/to/bec"
config_path = "/path/to/config" config_path = "/path/to/config"
with mock.patch("bec_server.service_handler.sys") as mock_sys: with mock.patch("bec_server.bec_server_utils.service_handler.sys") as mock_sys:
mock_sys.platform = "linux" mock_sys.platform = "linux"
service_handler = ServiceHandler(bec_path, config_path) service_handler = ServiceHandler(bec_path, config_path)
with mock.patch("bec_server.service_handler.tmux_stop") as mock_tmux_stop: with mock.patch("bec_server.bec_server_utils.service_handler.tmux_stop") as mock_tmux_stop:
with mock.patch("bec_server.service_handler.tmux_start") as mock_tmux_start: with mock.patch(
"bec_server.bec_server_utils.service_handler.tmux_start"
) as mock_tmux_start:
service_handler.restart() service_handler.restart()
mock_tmux_stop.assert_called_once() mock_tmux_stop.assert_called_once()
mock_tmux_start.assert_called_once_with( mock_tmux_start.assert_called_once_with(

View File

@ -1,11 +1,11 @@
from string import Template from string import Template
from unittest import mock from unittest import mock
from bec_server.tmux_launch import tmux_start, tmux_stop from bec_server.bec_server_utils.tmux_launch import tmux_start, tmux_stop
def test_tmux_start(): def test_tmux_start():
with mock.patch("bec_server.tmux_launch.libtmux") as mock_libtmux_server: with mock.patch("bec_server.bec_server_utils.tmux_launch.libtmux") as mock_libtmux_server:
tmux_start( tmux_start(
"/path/to/bec", "/path/to/bec",
"/path/to/config", "/path/to/config",
@ -33,7 +33,7 @@ def test_tmux_start():
def test_tmux_stop_without_sessions(): def test_tmux_stop_without_sessions():
with mock.patch("bec_server.tmux_launch.libtmux") as mock_libtmux_server: with mock.patch("bec_server.bec_server_utils.tmux_launch.libtmux") as mock_libtmux_server:
mock_libtmux_server.Server().sessions.filter.return_value = [] mock_libtmux_server.Server().sessions.filter.return_value = []
tmux_stop() tmux_stop()
mock_libtmux_server.Server().kill_server.assert_not_called() mock_libtmux_server.Server().kill_server.assert_not_called()
@ -41,7 +41,7 @@ def test_tmux_stop_without_sessions():
def test_tmux_stop_with_sessions(): def test_tmux_stop_with_sessions():
session = mock.MagicMock() session = mock.MagicMock()
with mock.patch("bec_server.tmux_launch.libtmux") as mock_libtmux_server: with mock.patch("bec_server.bec_server_utils.tmux_launch.libtmux") as mock_libtmux_server:
mock_libtmux_server.Server().sessions.filter.return_value = [session] mock_libtmux_server.Server().sessions.filter.return_value = [session]
tmux_stop() tmux_stop()
session.kill_session.assert_called_once() session.kill_session.assert_called_once()

View File

@ -0,0 +1,40 @@
from unittest import mock
from bec_server.data_processing.cli.launch import main
def test_main():
with mock.patch("bec_server.data_processing.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("bec_server.data_processing.cli.launch.ServiceConfig") as mock_config:
with mock.patch(
"bec_server.data_processing.dap_server.DAPServer"
) as mock_data_processing:
with mock.patch(
"bec_server.data_processing.cli.launch.threading.Event"
) as mock_event:
main()
mock_parser.assert_called_once()
mock_config.assert_called_once()
mock_data_processing.assert_called_once()
mock_event.assert_called_once()
def test_main_shutdown():
with mock.patch("bec_server.data_processing.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("bec_server.data_processing.cli.launch.ServiceConfig") as mock_config:
with mock.patch(
"bec_server.data_processing.dap_server.DAPServer"
) as mock_data_processing:
with mock.patch(
"bec_server.data_processing.cli.launch.threading.Event"
) as mock_event:
mock_event.return_value.wait.side_effect = KeyboardInterrupt()
try:
main()
except KeyboardInterrupt:
pass
mock_parser.assert_called_once()
mock_config.assert_called_once()
mock_data_processing.assert_called_once()
mock_event.assert_called_once()
mock_data_processing.return_value.shutdown.assert_called_once()

View File

@ -1,8 +1,8 @@
from unittest import mock from unittest import mock
from bec_lib import ServiceConfig from bec_lib import ServiceConfig
from data_processing.dap_server import DAPServer from bec_server.data_processing.dap_server import DAPServer
from data_processing.dap_service import DAPServiceBase from bec_server.data_processing.dap_service import DAPServiceBase
def test_dap_server(): def test_dap_server():

View File

@ -4,8 +4,8 @@ import pytest
from bec_lib import messages from bec_lib import messages
from bec_lib.redis_connector import MessageObject from bec_lib.redis_connector import MessageObject
from data_processing.dap_service import DAPServiceBase from bec_server.data_processing.dap_service import DAPServiceBase
from data_processing.dap_service_manager import DAPServiceManager from bec_server.data_processing.dap_service_manager import DAPServiceManager
class ServiceMock(DAPServiceBase): class ServiceMock(DAPServiceBase):

View File

@ -4,8 +4,8 @@ import lmfit
import numpy as np import numpy as np
import pytest import pytest
from data_processing.dap_service import DAPError from bec_server.data_processing.dap_service import DAPError
from data_processing.lmfit1d_service import LmfitService1D from bec_server.data_processing.lmfit1d_service import LmfitService1D
@pytest.fixture @pytest.fixture
@ -113,7 +113,7 @@ def test_LmfitService1D_on_scan_status_update(lmfit_service):
def test_LmfitService1D_on_scan_status_update_finishes_on_closed_scans(lmfit_service): def test_LmfitService1D_on_scan_status_update_finishes_on_closed_scans(lmfit_service):
with mock.patch("data_processing.lmfit1d_service.threading") as threading: with mock.patch("bec_server.data_processing.lmfit1d_service.threading") as threading:
event = threading.Event() event = threading.Event()
lmfit_service.finish_event = event lmfit_service.finish_event = event
with mock.patch.object(lmfit_service, "process_until_finished") as process_until_finished: with mock.patch.object(lmfit_service, "process_until_finished") as process_until_finished:

View File

@ -8,8 +8,8 @@ from test_device_manager_ds import device_manager
import bec_lib import bec_lib
from bec_lib import messages from bec_lib import messages
from bec_lib.tests.utils import ConnectorMock, load_test_config from bec_lib.tests.utils import ConnectorMock, load_test_config
from device_server.devices.config_update_handler import ConfigUpdateHandler from bec_server.device_server.devices.config_update_handler import ConfigUpdateHandler
from device_server.devices.devicemanager import DeviceConfigError, DeviceManagerDS from bec_server.device_server.devices.devicemanager import DeviceConfigError, DeviceManagerDS
dir_path = os.path.dirname(bec_lib.__file__) dir_path = os.path.dirname(bec_lib.__file__)

View File

@ -10,7 +10,7 @@ import yaml
import bec_lib import bec_lib
from bec_lib import MessageEndpoints, messages from bec_lib import MessageEndpoints, messages
from bec_lib.tests.utils import ConnectorMock, create_session_from_config from bec_lib.tests.utils import ConnectorMock, create_session_from_config
from device_server.devices.devicemanager import DeviceManagerDS from bec_server.device_server.devices.devicemanager import DeviceManagerDS
# pylint: disable=missing-function-docstring # pylint: disable=missing-function-docstring
# pylint: disable=protected-access # pylint: disable=protected-access

View File

@ -3,7 +3,7 @@ from ophyd import Component as Cpt
from ophyd import Device, Signal from ophyd import Device, Signal
from bec_lib.bec_errors import DeviceConfigError from bec_lib.bec_errors import DeviceConfigError
from device_server.devices.device_serializer import get_device_info from bec_server.device_server.devices.device_serializer import get_device_info
class DummyDeviceWithConflictingSignalNames(Device): class DummyDeviceWithConflictingSignalNames(Device):

View File

@ -10,8 +10,8 @@ from bec_lib import Alarms, MessageEndpoints, ServiceConfig, messages
from bec_lib.messages import BECStatus from bec_lib.messages import BECStatus
from bec_lib.redis_connector import MessageObject from bec_lib.redis_connector import MessageObject
from bec_lib.tests.utils import ConnectorMock from bec_lib.tests.utils import ConnectorMock
from device_server import DeviceServer from bec_server.device_server import DeviceServer
from device_server.device_server import InvalidDeviceError from bec_server.device_server.device_server import InvalidDeviceError
# pylint: disable=missing-function-docstring # pylint: disable=missing-function-docstring
# pylint: disable=protected-access # pylint: disable=protected-access

View File

@ -0,0 +1,32 @@
from unittest import mock
from bec_server.device_server.cli.launch import main
def test_main():
with mock.patch("bec_server.device_server.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("bec_server.device_server.cli.launch.ServiceConfig") as mock_config:
with mock.patch("bec_server.device_server.DeviceServer") as mock_device_server:
with mock.patch(
"bec_server.device_server.cli.launch.threading.Event"
) as mock_event:
main()
mock_parser.assert_called_once()
mock_config.assert_called_once()
mock_device_server.assert_called_once()
mock_event.assert_called_once()
def test_main_shutdown():
with mock.patch("bec_server.device_server.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("bec_server.device_server.cli.launch.ServiceConfig") as mock_config:
with mock.patch("bec_server.device_server.DeviceServer") as mock_device_server:
with mock.patch(
"bec_server.device_server.cli.launch.threading.Event"
) as mock_event:
mock_event.return_value.wait.side_effect = KeyboardInterrupt
main()
mock_parser.assert_called_once()
mock_config.assert_called_once()
mock_device_server.assert_called_once()
mock_event.assert_called_once()

View File

@ -6,7 +6,7 @@ import pytest
from ophyd import Device, Kind, Signal, Staged, StatusBase from ophyd import Device, Kind, Signal, Staged, StatusBase
from bec_lib import Alarms, MessageEndpoints, messages from bec_lib import Alarms, MessageEndpoints, messages
from device_server.rpc_mixin import RPCMixin from bec_server.device_server.rpc_mixin import RPCMixin
@pytest.fixture @pytest.fixture

View File

@ -5,14 +5,14 @@ from unittest import mock
import h5py import h5py
import numpy as np import numpy as np
import pytest import pytest
from file_writer_plugins.cSAXS import NeXus_format as cSAXS_Nexus_format
from test_file_writer_manager import file_writer_manager_mock from test_file_writer_manager import file_writer_manager_mock
import file_writer
from bec_lib.tests.fixtures import dm_with_devices from bec_lib.tests.fixtures import dm_with_devices
from file_writer import NexusFileWriter, NeXusFileXMLWriter from bec_server import file_writer
from file_writer.file_writer import HDF5Storage from bec_server.file_writer import NexusFileWriter, NeXusFileXMLWriter
from file_writer.file_writer_manager import ScanStorage from bec_server.file_writer.file_writer import HDF5Storage
from bec_server.file_writer.file_writer_manager import ScanStorage
from bec_server.file_writer_plugins.cSAXS import NeXus_format as cSAXS_Nexus_format
dir_path = os.path.dirname(file_writer.__file__) dir_path = os.path.dirname(file_writer.__file__)
@ -24,18 +24,6 @@ def file_writer_manager_mock_with_dm(file_writer_manager_mock, dm_with_devices):
yield file_writer yield file_writer
def test_nexus_file_xml_writer(file_writer_manager_mock_with_dm):
file_manager = file_writer_manager_mock_with_dm
file_writer = NeXusFileXMLWriter(file_manager)
file_writer.configure(
layout_file=os.path.abspath(os.path.join(dir_path, "../layout_cSAXS_NXsas.xml"))
)
with mock.patch.object(
file_writer, "_create_device_data_storage", return_value={"samx": [0, 1, 2]}
):
file_writer.write("./test.h5", {})
def test_csaxs_nexus_format(file_writer_manager_mock_with_dm): def test_csaxs_nexus_format(file_writer_manager_mock_with_dm):
file_manager = file_writer_manager_mock_with_dm file_manager = file_writer_manager_mock_with_dm
writer_storage = cSAXS_Nexus_format( writer_storage = cSAXS_Nexus_format(

View File

@ -1,13 +1,13 @@
from unittest import mock from unittest import mock
from file_writer.cli.launch import main from bec_server.file_writer.cli.launch import main
def test_main(): def test_main():
with mock.patch("file_writer.cli.launch.argparse.ArgumentParser") as mock_parser: with mock.patch("bec_server.file_writer.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("file_writer.cli.launch.ServiceConfig") as mock_config: with mock.patch("bec_server.file_writer.cli.launch.ServiceConfig") as mock_config:
with mock.patch("file_writer.FileWriterManager") as mock_file_writer: with mock.patch("bec_server.file_writer.FileWriterManager") as mock_file_writer:
with mock.patch("file_writer.cli.launch.threading.Event") as mock_event: with mock.patch("bec_server.file_writer.cli.launch.threading.Event") as mock_event:
main() main()
mock_parser.assert_called_once() mock_parser.assert_called_once()
mock_config.assert_called_once() mock_config.assert_called_once()
@ -16,10 +16,10 @@ def test_main():
def test_main_shutdown(): def test_main_shutdown():
with mock.patch("file_writer.cli.launch.argparse.ArgumentParser") as mock_parser: with mock.patch("bec_server.file_writer.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("file_writer.cli.launch.ServiceConfig") as mock_config: with mock.patch("bec_server.file_writer.cli.launch.ServiceConfig") as mock_config:
with mock.patch("file_writer.FileWriterManager") as mock_file_writer: with mock.patch("bec_server.file_writer.FileWriterManager") as mock_file_writer:
with mock.patch("file_writer.cli.launch.threading.Event") as mock_event: with mock.patch("bec_server.file_writer.cli.launch.threading.Event") as mock_event:
mock_event.return_value.wait.side_effect = KeyboardInterrupt() mock_event.return_value.wait.side_effect = KeyboardInterrupt()
try: try:
main() main()

View File

@ -13,9 +13,9 @@ from bec_lib.logger import bec_logger
from bec_lib.messages import BECStatus from bec_lib.messages import BECStatus
from bec_lib.redis_connector import MessageObject from bec_lib.redis_connector import MessageObject
from bec_lib.tests.utils import ConnectorMock, create_session_from_config, get_device_info_mock from bec_lib.tests.utils import ConnectorMock, create_session_from_config, get_device_info_mock
from file_writer import FileWriterManager from bec_server.file_writer import FileWriterManager
from file_writer.file_writer import FileWriter from bec_server.file_writer.file_writer import FileWriter
from file_writer.file_writer_manager import ScanStorage from bec_server.file_writer.file_writer_manager import ScanStorage
# pylint: disable=missing-function-docstring # pylint: disable=missing-function-docstring
# pylint: disable=protected-access # pylint: disable=protected-access

View File

@ -8,7 +8,7 @@ import bec_lib
from bec_lib import DeviceManagerBase, ServiceConfig, bec_logger, messages from bec_lib import DeviceManagerBase, ServiceConfig, bec_logger, messages
from bec_lib.messages import BECStatus from bec_lib.messages import BECStatus
from bec_lib.tests.utils import ConnectorMock, create_session_from_config, get_device_info_mock from bec_lib.tests.utils import ConnectorMock, create_session_from_config, get_device_info_mock
from scan_bundler import ScanBundler from bec_server.scan_bundler import ScanBundler
# overwrite threads_check fixture from bec_lib, # overwrite threads_check fixture from bec_lib,
# to have it in autouse # to have it in autouse

View File

@ -3,7 +3,7 @@ from unittest import mock
import pytest import pytest
from bec_lib import MessageEndpoints, messages from bec_lib import MessageEndpoints, messages
from scan_bundler.bec_emitter import BECEmitter from bec_server.scan_bundler.bec_emitter import BECEmitter
@pytest.fixture @pytest.fixture

View File

@ -4,7 +4,7 @@ import msgpack
import pytest import pytest
from bec_lib import MessageEndpoints from bec_lib import MessageEndpoints
from scan_bundler.bluesky_emitter import BlueskyEmitter from bec_server.scan_bundler.bluesky_emitter import BlueskyEmitter
@pytest.fixture @pytest.fixture

View File

@ -3,7 +3,7 @@ from unittest import mock
import pytest import pytest
from bec_lib import messages from bec_lib import messages
from scan_bundler.emitter import EmitterBase from bec_server.scan_bundler.emitter import EmitterBase
@pytest.mark.parametrize( @pytest.mark.parametrize(

View File

@ -582,7 +582,7 @@ def test_send_scan_point(scan_bundler_mock, scan_id, point_id, sent):
sb.sync_storage[scan_id] = {"sent": set([1])} sb.sync_storage[scan_id] = {"sent": set([1])}
sb.sync_storage[scan_id][point_id] = {} sb.sync_storage[scan_id][point_id] = {}
with mock.patch.object(sb, "run_emitter") as emitter: with mock.patch.object(sb, "run_emitter") as emitter:
with mock.patch("scan_bundler.scan_bundler.logger") as logger: with mock.patch("bec_server.scan_bundler.scan_bundler.logger") as logger:
sb._send_scan_point(scan_id, point_id) sb._send_scan_point(scan_id, point_id)
emitter.assert_called_once_with("on_scan_point_emit", scan_id, point_id) emitter.assert_called_once_with("on_scan_point_emit", scan_id, point_id)
if sent: if sent:
@ -591,7 +591,7 @@ def test_send_scan_point(scan_bundler_mock, scan_id, point_id, sent):
def test_run_emitter(scan_bundler_mock): def test_run_emitter(scan_bundler_mock):
sb = scan_bundler_mock sb = scan_bundler_mock
with mock.patch("scan_bundler.scan_bundler.logger") as logger: with mock.patch("bec_server.scan_bundler.scan_bundler.logger") as logger:
sb.run_emitter("on_init", "jlaksjd", "jlkasjd") sb.run_emitter("on_init", "jlaksjd", "jlkasjd")
logger.error.assert_called() logger.error.assert_called()

View File

@ -1,13 +1,13 @@
from unittest import mock from unittest import mock
from scan_bundler.cli.launch import main from bec_server.scan_bundler.cli.launch import main
def test_main(): def test_main():
with mock.patch("scan_bundler.cli.launch.argparse.ArgumentParser") as mock_parser: with mock.patch("bec_server.scan_bundler.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("scan_bundler.cli.launch.ServiceConfig") as mock_config: with mock.patch("bec_server.scan_bundler.cli.launch.ServiceConfig") as mock_config:
with mock.patch("scan_bundler.ScanBundler") as mock_scan_bundler: with mock.patch("bec_server.scan_bundler.ScanBundler") as mock_scan_bundler:
with mock.patch("scan_bundler.cli.launch.threading.Event") as mock_event: with mock.patch("bec_server.scan_bundler.cli.launch.threading.Event") as mock_event:
main() main()
mock_parser.assert_called_once() mock_parser.assert_called_once()
mock_config.assert_called_once() mock_config.assert_called_once()
@ -16,10 +16,10 @@ def test_main():
def test_main_shutdown(): def test_main_shutdown():
with mock.patch("scan_bundler.cli.launch.argparse.ArgumentParser") as mock_parser: with mock.patch("bec_server.scan_bundler.cli.launch.argparse.ArgumentParser") as mock_parser:
with mock.patch("scan_bundler.cli.launch.ServiceConfig") as mock_config: with mock.patch("bec_server.scan_bundler.cli.launch.ServiceConfig") as mock_config:
with mock.patch("scan_bundler.ScanBundler") as mock_scan_bundler: with mock.patch("bec_server.scan_bundler.ScanBundler") as mock_scan_bundler:
with mock.patch("scan_bundler.cli.launch.threading.Event") as mock_event: with mock.patch("bec_server.scan_bundler.cli.launch.threading.Event") as mock_event:
mock_event.return_value.wait.side_effect = KeyboardInterrupt() mock_event.return_value.wait.side_effect = KeyboardInterrupt()
try: try:
main() main()

Some files were not shown because too many files have changed in this diff Show More