Skip to content

Commit b9b096f

Browse files
committed
Fix test_device_instantiation
1 parent 0c7d789 commit b9b096f

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
@@ -11,6 +11,7 @@
1111
from conftest import mock_attributes_table
1212
from dodal.common.beamlines import beamline_parameters, beamline_utils
1313
from dodal.common.beamlines.commissioning_mode import set_commissioning_signal
14+
from dodal.device_manager import DeviceManager
1415
from dodal.devices.baton import Baton
1516
from dodal.devices.detector import DetectorParams
1617
from dodal.devices.detector.det_dim_constants import EIGER2_X_16M_SIZE
@@ -32,11 +33,20 @@ def module_and_devices_for_beamline(request: pytest.FixtureRequest):
3233
with patch.dict(os.environ, {"BEAMLINE": beamline}, clear=True):
3334
bl_mod = importlib.import_module("dodal.beamlines." + beamline)
3435
mock_beamline_module_filepaths(beamline, bl_mod)
35-
devices, exceptions = make_all_devices(
36-
bl_mod,
37-
include_skipped=True,
38-
fake_with_ophyd_sim=True,
39-
)
36+
if isinstance(
37+
device_manager := getattr(bl_mod, "devices", None), DeviceManager
38+
):
39+
result = device_manager.build_all(include_skipped=True, mock=True).connect()
40+
devices, exceptions = (
41+
result.devices,
42+
result.connection_errors | result.build_errors,
43+
)
44+
else:
45+
devices, exceptions = make_all_devices(
46+
bl_mod,
47+
include_skipped=True,
48+
fake_with_ophyd_sim=True,
49+
)
4050
yield (bl_mod, devices, exceptions)
4151
beamline_utils.clear_devices()
4252
for factory in collect_factories(bl_mod).values():

0 commit comments

Comments
 (0)