Skip to content

Commit 7caa827

Browse files
committed
Fix test_device_instantiation
1 parent 33ffd3a commit 7caa827

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

src/dodal/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ def make_device(
240240
def make_all_devices(
241241
module: str | ModuleType | None = None, include_skipped: bool = False, **kwargs
242242
) -> tuple[dict[str, AnyDevice], dict[str, Exception]]:
243-
"""Makes all devices in the given beamline module.
243+
"""Makes all devices in the given beamline module, for those modules using device factories
244+
as opposed to the DeviceManager.
244245
245246
In cases of device interdependencies it ensures a device is created before any which
246247
depend on it.
@@ -413,7 +414,7 @@ def is_v2_device_factory(func: Callable) -> TypeGuard[V2DeviceFactory]:
413414

414415

415416
def is_any_device_factory(func: Callable) -> TypeGuard[AnyDeviceFactory]:
416-
return isinstance(func, (FunctionType, DeviceInitializationController)) and (
417+
return isinstance(func, FunctionType | DeviceInitializationController) and (
417418
is_v1_device_factory(func) or is_v2_device_factory(func)
418419
)
419420

tests/common/beamlines/test_device_instantiation.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from ophyd_async.core import NotConnectedError
55

66
from dodal.beamlines import all_beamline_modules
7+
from dodal.device_manager import DeviceManager
78
from dodal.utils import BLUESKY_PROTOCOLS, make_all_devices
89

910

@@ -44,6 +45,10 @@ def test_devices_are_identical(module_and_devices_for_beamline):
4445
Ensures that for every beamline all device functions prevent duplicate instantiation.
4546
"""
4647
bl_mod, devices_a, _ = module_and_devices_for_beamline
48+
if isinstance(getattr(bl_mod, "devices", None), DeviceManager):
49+
# DeviceManager beamline modules do not cache device instances
50+
return
51+
4752
devices_b, _ = make_all_devices(
4853
bl_mod,
4954
include_skipped=True,
@@ -55,7 +60,7 @@ def test_devices_are_identical(module_and_devices_for_beamline):
5560
if device is not devices_b[device_name]
5661
]
5762
total_number_of_devices = len(devices_a)
58-
non_identical_number_of_devies = len(devices_a)
63+
non_identical_number_of_devices = len(devices_a)
5964
assert len(non_identical_names) == 0, (
60-
f"{non_identical_number_of_devies}/{total_number_of_devices} devices were not identical: {non_identical_names}"
65+
f"{non_identical_number_of_devices}/{total_number_of_devices} devices were not identical: {non_identical_names}"
6166
)

tests/conftest.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from conftest import mock_attributes_table
1313
from dodal.common.beamlines import beamline_parameters, beamline_utils
1414
from dodal.common.beamlines.commissioning_mode import set_commissioning_signal
15+
from dodal.device_manager import DeviceManager
1516
from dodal.devices.baton import Baton
1617
from dodal.devices.detector import DetectorParams
1718
from dodal.devices.detector.det_dim_constants import EIGER2_X_16M_SIZE
@@ -33,11 +34,20 @@ def module_and_devices_for_beamline(request: pytest.FixtureRequest):
3334
with patch.dict(os.environ, {"BEAMLINE": beamline}, clear=True):
3435
bl_mod = importlib.import_module("dodal.beamlines." + beamline)
3536
mock_beamline_module_filepaths(beamline, bl_mod)
36-
devices, exceptions = make_all_devices(
37-
bl_mod,
38-
include_skipped=True,
39-
fake_with_ophyd_sim=True,
40-
)
37+
if isinstance(
38+
device_manager := getattr(bl_mod, "devices", None), DeviceManager
39+
):
40+
result = device_manager.build_all(include_skipped=True, mock=True).connect()
41+
devices, exceptions = (
42+
result.devices,
43+
result.connection_errors | result.build_errors,
44+
)
45+
else:
46+
devices, exceptions = make_all_devices(
47+
bl_mod,
48+
include_skipped=True,
49+
fake_with_ophyd_sim=True,
50+
)
4151
yield (bl_mod, devices, exceptions)
4252
beamline_utils.clear_devices()
4353
for factory in collect_factories(bl_mod).values():

0 commit comments

Comments
 (0)