Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
b4dbd8e
Add mock config server fixture
jacob720 Dec 9, 2025
bf08ced
Use config server to read beamlineParmaeters
jacob720 Dec 9, 2025
91fc322
Remove tests for removed functions
jacob720 Dec 9, 2025
386b521
Convert test beamlineParameters files
jacob720 Dec 9, 2025
acd5805
Fix test
jacob720 Dec 9, 2025
28b7823
Fix lint
jacob720 Dec 9, 2025
84f0836
Fix
jacob720 Jan 12, 2026
afd4fbc
Require latest daq-config-server
jacob720 Jan 12, 2026
2d92790
PR comments WIP
jacob720 Jan 20, 2026
e3f6fad
Parameterise config server URL
jacob720 Jan 23, 2026
3dbb881
Refactor get_beamline_parameters
jacob720 Jan 23, 2026
9517b6a
Update lockfile
jacob720 Jan 23, 2026
bc858b2
Use server deployed on i03 beamline cluster for i03 config
jacob720 Jan 29, 2026
9529dc1
typo
jacob720 Feb 4, 2026
4aac691
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Feb 4, 2026
cba50ab
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Feb 5, 2026
eaa20a2
WIP
jacob720 Feb 11, 2026
0d29dbe
Reset cache between tests
jacob720 Feb 11, 2026
feae3b6
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Feb 11, 2026
d4fda7b
Fix
jacob720 Feb 11, 2026
a947f60
Fix lint
jacob720 Feb 11, 2026
d5bd077
Fix lint
jacob720 Feb 12, 2026
4b4a3f1
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Feb 13, 2026
357a6c9
PR comments and coverage
jacob720 Feb 13, 2026
286a17c
Lint
jacob720 Feb 13, 2026
3d05eb2
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Feb 23, 2026
07b3d6e
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Feb 27, 2026
4534194
Use config server in undulator device
jacob720 Dec 8, 2025
c498073
Fix tests
jacob720 Dec 8, 2025
79dbb4a
Use specific lut models for each undulator lut
jacob720 Jan 6, 2026
e897e2a
PR comments
jacob720 Feb 27, 2026
9a5537a
Fix tests
jacob720 Feb 27, 2026
667e94a
Fix lint
jacob720 Mar 2, 2026
759b306
Use config server deployed on i04 cluster
jacob720 Mar 3, 2026
b89130c
Improve patching of BEAMLINE env variable in tests
jacob720 Mar 3, 2026
df01066
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Mar 9, 2026
7599d49
Merge branch 'main' into mx_bluesky_1504_migrate_beamline_parameters_…
jacob720 Mar 12, 2026
40e91a9
Merge branch 'mx_bluesky_1504_migrate_beamline_parameters_to_config_s…
jacob720 Mar 12, 2026
841c063
Merge branch 'main' into mx_bluesky_1494_use_config_server_for_undulator
jacob720 Mar 17, 2026
21b0c71
Pass config client into undulator
jacob720 Mar 17, 2026
0222002
Merge branch 'main' into mx_bluesky_1494_use_config_server_for_undulator
jacob720 Mar 18, 2026
a32f358
Fix imports
jacob720 Mar 18, 2026
464b030
Fix test
jacob720 Mar 18, 2026
3ca40b4
Remove uneeded fixtures
jacob720 Mar 18, 2026
f2d2cb5
Remove beamline config client constants
jacob720 Mar 19, 2026
321287b
Rework injection of config client
jacob720 Mar 23, 2026
26c3890
Push interaction with config client into devices where possible
jacob720 Mar 23, 2026
341828a
Small fixes
jacob720 Mar 23, 2026
e357788
Add test for coverage
jacob720 Mar 23, 2026
c3f2952
Merge branch 'main' into mx_bluesky_1494_use_config_server_for_undulator
jacob720 Mar 23, 2026
50a4272
Read config at device instantiation
jacob720 Mar 24, 2026
c446104
Fix lint
jacob720 Mar 24, 2026
bcfa28d
Merge branch 'main' into mx_bluesky_1494_use_config_server_for_undulator
jacob720 Mar 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions src/dodal/beamlines/i03.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from functools import cache

from daq_config_server import ConfigClient
from ophyd_async.core import PathProvider, Reference
from ophyd_async.fastcs.eiger import EigerDetector as FastEiger
from ophyd_async.fastcs.panda import HDFPanda
from yarl import URL

from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
from dodal.common.beamlines.beamline_utils import set_path_provider
from dodal.common.beamlines.beamline_utils import set_config_client, set_path_provider
from dodal.common.beamlines.commissioning_mode import set_commissioning_signal
from dodal.common.udc_directory_provider import PandASubpathProvider
from dodal.device_manager import DeviceManager
Expand Down Expand Up @@ -69,6 +70,7 @@
)
DISPLAY_CONFIG = "/dls_sw/i03/software/gda_versions/var/display.configuration"
DAQ_CONFIGURATION_PATH = "/dls_sw/i03/software/daq_configuration"
I03_CONFIG_SERVER_ENDPOINT = "https://i03-daq-config.diamond.ac.uk"

BL = get_beamline_name("i03")
set_log_beamline(BL)
Expand All @@ -92,6 +94,14 @@ def path_provider() -> PathProvider:
return provider


@devices.fixture
@cache
def config_client() -> ConfigClient:
client = ConfigClient(I03_CONFIG_SERVER_ENDPOINT)
set_config_client(client)
return client


@devices.fixture
def daq_configuration_path() -> str:
return DAQ_CONFIGURATION_PATH
Expand Down Expand Up @@ -141,10 +151,11 @@ def vfm() -> FocusingMirrorWithStripes:


@devices.factory()
def mirror_voltages() -> MirrorVoltages:
def mirror_voltages(config_client: ConfigClient) -> MirrorVoltages:
return MirrorVoltages(
prefix=f"{PREFIX.beamline_prefix}-MO-PSU-01:",
daq_configuration_path=DAQ_CONFIGURATION_PATH,
config_client=config_client,
)


Expand Down Expand Up @@ -223,22 +234,29 @@ def synchrotron() -> Synchrotron:


@devices.factory()
def undulator(baton: Baton, daq_configuration_path: str) -> UndulatorInKeV:
def undulator(
baton: Baton, daq_configuration_path: str, config_client: ConfigClient
) -> UndulatorInKeV:
return UndulatorInKeV(
f"{BeamlinePrefix(BL).insertion_prefix}-MO-SERVC-01:",
config_client=config_client,
id_gap_lookup_table_path=f"{daq_configuration_path}/lookup/BeamLine_Undulator_toGap.txt",
baton=baton,
)


@devices.factory()
def undulator_dcm(
undulator: UndulatorInKeV, dcm: DCM, daq_configuration_path: str
undulator: UndulatorInKeV,
dcm: DCM,
daq_configuration_path: str,
config_client: ConfigClient,
) -> UndulatorDCM:
return UndulatorDCM(
undulator=undulator,
dcm=dcm,
daq_configuration_path=daq_configuration_path,
config_client=config_client,
)


Expand Down
19 changes: 17 additions & 2 deletions src/dodal/beamlines/i04.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from functools import cache

from daq_config_server import ConfigClient
from ophyd_async.core import Reference

from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
from dodal.common.beamlines.beamline_utils import set_config_client
from dodal.device_manager import DeviceManager
from dodal.devices.aperturescatterguard import (
AperturePosition,
Expand Down Expand Up @@ -57,7 +61,7 @@
ZOOM_PARAMS_FILE = "/dls_sw/i04/software/bluesky/scratch/jCameraManZoomLevels.xml"
DISPLAY_CONFIG = "/dls_sw/i04/software/bluesky/scratch/display.configuration"
DAQ_CONFIGURATION_PATH = "/dls_sw/i04/software/daq_configuration"

I04_CONFIG_SERVER_ENDPOINT = "https://i04-daq-config.diamond.ac.uk"

BL = get_beamline_name("i04")
set_log_beamline(BL)
Expand All @@ -72,6 +76,14 @@
devices = DeviceManager()


@devices.fixture
@cache
def config_client() -> ConfigClient:
client = ConfigClient(I04_CONFIG_SERVER_ENDPOINT)
set_config_client(client)
return client


@devices.factory(use_factory_name=False)
def smargon() -> Smargon:
return Smargon(f"{PREFIX.beamline_prefix}-MO-SGON-01:", name="gonio")
Expand Down Expand Up @@ -179,9 +191,12 @@ def daq_configuration_path() -> str:


@devices.factory()
def undulator(baton: Baton, daq_configuration_path: str) -> UndulatorInKeV:
def undulator(
baton: Baton, daq_configuration_path: str, config_client: ConfigClient
) -> UndulatorInKeV:
return UndulatorInKeV(
prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
config_client=config_client,
id_gap_lookup_table_path=f"{daq_configuration_path}/lookup/BeamLine_Undulator_toGap.txt",
baton=baton,
)
Expand Down
16 changes: 15 additions & 1 deletion src/dodal/beamlines/i07.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
from functools import cache

from daq_config_server import ConfigClient

from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
from dodal.common.beamlines.beamline_utils import set_config_client
from dodal.device_manager import DeviceManager
from dodal.devices.beamlines.i07.dcm import DCM
from dodal.devices.beamlines.i07.id import InsertionDevice
Expand All @@ -14,6 +19,14 @@
devices = DeviceManager()


@devices.fixture
@cache
def config_client() -> ConfigClient:
client = ConfigClient()
set_config_client(client)
return client


@devices.factory()
def dcm() -> DCM:
"""Instantiate DCM using two PV bases."""
Expand All @@ -28,12 +41,13 @@ def harmonic() -> UndulatorOrder:


@devices.factory()
def id(harmonic: UndulatorOrder) -> InsertionDevice:
def id(harmonic: UndulatorOrder, config_client: ConfigClient) -> InsertionDevice:
"""Get the i07 undulator device, instantiate it if it hasn't already been.
If this is called when already instantiated it will return the existing object.
"""
return InsertionDevice(
f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
harmonic,
config_client,
id_gap_lookup_table_path="/dls_sw/i07/software/gda/config/lookupTables/IIDCalibrationTable.txt",
)
9 changes: 8 additions & 1 deletion src/dodal/beamlines/i18.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
from pathlib import Path

from daq_config_server import ConfigClient
from ophyd_async.fastcs.panda import HDFPanda

from dodal.common.beamlines.beamline_utils import (
device_factory,
get_config_client,
get_path_provider,
set_config_client,
set_path_provider,
)
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
Expand Down Expand Up @@ -46,6 +49,8 @@
)
)

set_config_client(ConfigClient())


@device_factory()
def synchrotron() -> Synchrotron:
Expand All @@ -54,7 +59,9 @@ def synchrotron() -> Synchrotron:

@device_factory()
def undulator() -> UndulatorInKeV:
return UndulatorInKeV(f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
return UndulatorInKeV(
f"{PREFIX.insertion_prefix}-MO-SERVC-01:", get_config_client()
)


# See https://github.com/DiamondLightSource/dodal/issues/1180
Expand Down
13 changes: 12 additions & 1 deletion src/dodal/beamlines/i22.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from functools import cache
from pathlib import Path

from daq_config_server import ConfigClient
from ophyd_async.core import (
PathProvider,
StaticPathProvider,
Expand All @@ -12,6 +13,7 @@
from ophyd_async.fastcs.panda import HDFPanda

from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
from dodal.common.beamlines.beamline_utils import set_config_client
from dodal.common.beamlines.device_helpers import CAM_SUFFIX, DET_SUFFIX, HDF5_SUFFIX
from dodal.common.crystal_metadata import (
MaterialsEnum,
Expand Down Expand Up @@ -52,6 +54,14 @@ def path_provider() -> PathProvider:
return StaticPathProvider(UUIDFilenameProvider(), Path("/tmp"))


@devices.fixture
@cache
def config_client() -> ConfigClient:
client = ConfigClient()
set_config_client(client)
return client


@devices.factory()
def saxs(path_provider: PathProvider) -> PilatusDetector:
metadata_holder = NXSasMetadataHolder(
Expand Down Expand Up @@ -178,9 +188,10 @@ def dcm() -> DCM:


@devices.factory()
def undulator() -> UndulatorInKeV:
def undulator(config_client: ConfigClient) -> UndulatorInKeV:
return UndulatorInKeV(
prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
config_client=config_client,
id_gap_lookup_table_path="/dls_sw/i22/software/daq_configuration/lookup/BeamLine_Undulator_toGap.txt",
poles=80,
length=2.0,
Expand Down
6 changes: 6 additions & 0 deletions src/dodal/beamlines/p38.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
from pathlib import Path

from daq_config_server import ConfigClient
from ophyd_async.epics.adaravis import AravisDetector
from ophyd_async.fastcs.panda import HDFPanda

from dodal.common.beamlines.beamline_utils import (
device_factory,
get_config_client,
get_path_provider,
set_config_client,
set_path_provider,
)
from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
Expand Down Expand Up @@ -45,6 +48,8 @@
)
)

set_config_client(ConfigClient())


@device_factory()
def d3() -> AravisDetector:
Expand Down Expand Up @@ -160,6 +165,7 @@ def dcm() -> DCM:
def undulator() -> UndulatorInKeV:
return UndulatorInKeV(
f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
get_config_client(),
poles=80,
length=2.0,
)
Expand Down
4 changes: 2 additions & 2 deletions src/dodal/common/beamlines/beamline_parameters.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Any

from dodal.common.beamlines.config_client import get_config_client
from dodal.common.beamlines.beamline_utils import get_config_client

BEAMLINE_PARAMETER_PATHS = {
"i03": "/dls_sw/i03/software/daq_configuration/domain/beamlineParameters",
Expand All @@ -22,5 +22,5 @@ def get_beamline_parameters(beamline: str) -> dict[str, Any]:
raise KeyError(
"No beamline parameter path found, maybe 'BEAMLINE' environment variable is not set!"
)
config_client = get_config_client(beamline)
config_client = get_config_client()
return config_client.get_file_contents(beamline_param_path, dict)
24 changes: 24 additions & 0 deletions src/dodal/common/beamlines/beamline_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Annotated, Final, TypeVar, cast

from bluesky.run_engine import call_in_bluesky_event_loop
from daq_config_server import ConfigClient
from ophyd import Device as OphydV1Device
from ophyd.sim import make_fake_device
from ophyd_async.core import (
Expand Down Expand Up @@ -183,3 +184,26 @@ def clear_path_provider() -> None:
except NameError:
# In this case the path provider was never set so we can do nothing
pass


def set_config_client(config_client: ConfigClient):
global CONFIG_CLIENT

LOGGER.info(
f"Setting global config client to {config_client} (previously {globals().get('CONFIG_CLIENT')})",
)
CONFIG_CLIENT = config_client


def get_config_client() -> ConfigClient:
return CONFIG_CLIENT


def clear_config_client() -> None:
global CONFIG_CLIENT
LOGGER.info(f"Clearing global config client: {globals().get('CONFIG_CLIENT')}")
try:
del CONFIG_CLIENT
except NameError:
# In this case the config client was never set so we can do nothing
pass
16 changes: 0 additions & 16 deletions src/dodal/common/beamlines/config_client.py

This file was deleted.

Loading
Loading