diff --git a/.vscode/launch.json b/.vscode/launch.json index 27c9bb2659..0b92c7febe 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,7 +18,8 @@ "env": { // Enable break on exception when debugging tests (see: tests/conftest.py) "PYTEST_RAISE": "1", + "PYTEST_ADDOPTS": "--no-cov -vv" }, } ] -} +} \ No newline at end of file diff --git a/src/dodal/beamlines/i03.py b/src/dodal/beamlines/i03.py index ef15337620..45d6ce2306 100644 --- a/src/dodal/beamlines/i03.py +++ b/src/dodal/beamlines/i03.py @@ -10,6 +10,7 @@ from dodal.devices.aperturescatterguard import AperturePositions, ApertureScatterguard from dodal.devices.attenuator import Attenuator from dodal.devices.backlight import Backlight +from dodal.devices.cryostream import CryoStream from dodal.devices.dcm import DCM from dodal.devices.detector import DetectorParams from dodal.devices.detector.detector_motion import DetectorMotion @@ -511,3 +512,18 @@ def lower_gonio( wait_for_connection, fake_with_ophyd_sim, ) + + +def cryo_stream( + wait_for_connection: bool = True, fake_with_ophyd_sim: bool = False +) -> CryoStream: + """Get the i03 cryostream device, instantiate it if it hasn't already been. + If this is called when already instantiated in i03, it will return the existing object. + """ + return device_instantiation( + CryoStream, + "cryo_stream", + "", + wait_for_connection, + fake_with_ophyd_sim, + ) diff --git a/src/dodal/cli.py b/src/dodal/cli.py index a7d1ddf4ab..06894e2752 100644 --- a/src/dodal/cli.py +++ b/src/dodal/cli.py @@ -58,10 +58,13 @@ def connect(beamline: str, all: bool, sim_backend: bool) -> None: include_skipped=all, fake_with_ophyd_sim=sim_backend, ) - sim_statement = "(sim mode)" if sim_backend else "" + sim_statement = " (sim mode)" if sim_backend else "" - print(f"{len(devices)} devices connected {sim_statement}:") - print("\n".join([f"\t{device_name}" for device_name in devices.keys()])) + print(f"{len(devices)} devices connected{sim_statement}:") + connected_devices = "\n".join( + sorted([f"\t{device_name}" for device_name in devices.keys()]) + ) + print(connected_devices) # If exceptions have occurred, this will print details of the relevant PVs if len(exceptions) > 0: diff --git a/src/dodal/devices/cryostream.py b/src/dodal/devices/cryostream.py index 5d562337c6..a68aa657db 100644 --- a/src/dodal/devices/cryostream.py +++ b/src/dodal/devices/cryostream.py @@ -1,9 +1,21 @@ -from ophyd import Component as Cpt -from ophyd import Device, EpicsSignal, EpicsSignalRO +from enum import Enum +from ophyd_async.core import StandardReadable +from ophyd_async.epics.signal import epics_signal_r, epics_signal_rw -class Cryo(Device): - course = Cpt(EpicsSignal, "-EA-CJET-01:COARSE:CTRL") - fine = Cpt(EpicsSignal, "-EA-CJET-01:FINE:CTRL") - temp = Cpt(EpicsSignalRO, "-EA-CSTRM-01:TEMP") - backpress = Cpt(EpicsSignalRO, "-EA-CSTRM-01:BACKPRESS") + +class InOut(str, Enum): + IN = "In" + OUT = "Out" + + +class CryoStream(StandardReadable): + def __init__(self, prefix: str, name: str = ""): + self.course = epics_signal_rw(InOut, f"{prefix}-EA-CJET-01:COARSE:CTRL") + self.fine = epics_signal_rw(InOut, f"{prefix}-EA-CJET-01:FINE:CTRL") + self.temperature_k = epics_signal_r(float, f"{prefix}-EA-CSTRM-01:TEMP") + self.back_pressure_bar = epics_signal_r( + float, f"{prefix}-EA-CSTRM-01:BACKPRESS" + ) + + super().__init__(name) diff --git a/tests/common/beamlines/test_device_instantiation.py b/tests/common/beamlines/test_device_instantiation.py index c3ca85ade0..704bad1343 100644 --- a/tests/common/beamlines/test_device_instantiation.py +++ b/tests/common/beamlines/test_device_instantiation.py @@ -24,8 +24,8 @@ def test_device_creation(RE, module_and_devices_for_beamline): module, devices = module_and_devices_for_beamline for device_name, device in devices.items(): assert device_name in beamline_utils.ACTIVE_DEVICES, ( - f"No device named {device_name} was created, devices " - f"are {beamline_utils.ACTIVE_DEVICES.keys()}" + f"No device named {device_name} was created for {module}, " + f"devices are {beamline_utils.ACTIVE_DEVICES.keys()}" ) assert follows_bluesky_protocols(device) assert len(beamline_utils.ACTIVE_DEVICES) == len(devices) diff --git a/tests/fake_beamline.py b/tests/fake_beamline.py index 438eb11fcc..5410b26dbc 100644 --- a/tests/fake_beamline.py +++ b/tests/fake_beamline.py @@ -3,7 +3,7 @@ from bluesky.protocols import Readable from ophyd import EpicsMotor -from dodal.devices.cryostream import Cryo +from dodal.devices.cryostream import CryoStream def device_a() -> Readable: @@ -14,7 +14,7 @@ def device_b() -> EpicsMotor: return _mock_with_name("motor") -def device_c() -> Cryo: +def device_c() -> CryoStream: return _mock_with_name("cryo") diff --git a/tests/fake_beamline_all_devices_raise_exception.py b/tests/fake_beamline_all_devices_raise_exception.py index ca1c591c9a..9204c1725d 100644 --- a/tests/fake_beamline_all_devices_raise_exception.py +++ b/tests/fake_beamline_all_devices_raise_exception.py @@ -3,7 +3,7 @@ from bluesky.protocols import Readable from ophyd_async.epics.motion import Motor -from dodal.devices.cryostream import Cryo +from dodal.devices.cryostream import CryoStream def device_a() -> Readable: @@ -14,5 +14,5 @@ def device_b() -> Motor: raise asyncio.TimeoutError -def device_c() -> Cryo: +def device_c() -> CryoStream: raise ValueError diff --git a/tests/fake_beamline_broken_dependency.py b/tests/fake_beamline_broken_dependency.py index 5e36278146..c575798db8 100644 --- a/tests/fake_beamline_broken_dependency.py +++ b/tests/fake_beamline_broken_dependency.py @@ -3,7 +3,7 @@ from bluesky.protocols import Readable from ophyd import EpicsMotor -from dodal.devices.cryostream import Cryo +from dodal.devices.cryostream import CryoStream def device_x() -> Readable: @@ -14,7 +14,7 @@ def device_y() -> EpicsMotor: raise AssertionError("Test failure") -def device_z(device_x: Readable, device_y: EpicsMotor) -> Cryo: +def device_z(device_x: Readable, device_y: EpicsMotor) -> CryoStream: return _mock_with_name("cryo") diff --git a/tests/fake_beamline_dependencies.py b/tests/fake_beamline_dependencies.py index 3edbfdf91c..03f00cafee 100644 --- a/tests/fake_beamline_dependencies.py +++ b/tests/fake_beamline_dependencies.py @@ -3,7 +3,7 @@ from bluesky.protocols import Readable from ophyd import EpicsMotor -from dodal.devices.cryostream import Cryo +from dodal.devices.cryostream import CryoStream def device_x() -> Readable: @@ -14,7 +14,7 @@ def device_y() -> EpicsMotor: return _mock_with_name("motor") -def device_z(device_x: Readable, device_y: EpicsMotor) -> Cryo: +def device_z(device_x: Readable, device_y: EpicsMotor) -> CryoStream: return _mock_with_name("cryo") diff --git a/tests/fake_beamline_disordered_dependencies.py b/tests/fake_beamline_disordered_dependencies.py index a082595f72..cfd334ee9b 100644 --- a/tests/fake_beamline_disordered_dependencies.py +++ b/tests/fake_beamline_disordered_dependencies.py @@ -3,10 +3,10 @@ from bluesky.protocols import Readable from ophyd import EpicsMotor -from dodal.devices.cryostream import Cryo +from dodal.devices.cryostream import CryoStream -def device_z(device_x: Readable, device_y: EpicsMotor) -> Cryo: +def device_z(device_x: Readable, device_y: EpicsMotor) -> CryoStream: return _mock_with_name("cryo")