refactor: formatting; fixed tests for expected return
This commit is contained in:
parent
747aa36837
commit
bf38e89f79
@ -9,10 +9,7 @@ import numpy as np
|
|||||||
from prettytable import PrettyTable
|
from prettytable import PrettyTable
|
||||||
from typeguard import typechecked
|
from typeguard import typechecked
|
||||||
|
|
||||||
from ophyd_devices.smaract.smaract_errors import (
|
from ophyd_devices.smaract.smaract_errors import SmaractCommunicationError, SmaractErrorCode
|
||||||
SmaractCommunicationError,
|
|
||||||
SmaractErrorCode,
|
|
||||||
)
|
|
||||||
from ophyd_devices.utils.controller import Controller, axis_checked, threadlocked
|
from ophyd_devices.utils.controller import Controller, axis_checked, threadlocked
|
||||||
|
|
||||||
logger = logging.getLogger("smaract_controller")
|
logger = logging.getLogger("smaract_controller")
|
||||||
@ -118,11 +115,7 @@ class SmaractController(Controller):
|
|||||||
|
|
||||||
@threadlocked
|
@threadlocked
|
||||||
def socket_put_and_receive(
|
def socket_put_and_receive(
|
||||||
self,
|
self, val: str, remove_trailing_chars=True, check_for_errors=True, raise_if_not_status=False
|
||||||
val: str,
|
|
||||||
remove_trailing_chars=True,
|
|
||||||
check_for_errors=True,
|
|
||||||
raise_if_not_status=False,
|
|
||||||
) -> str:
|
) -> str:
|
||||||
self.socket_put(val)
|
self.socket_put(val)
|
||||||
return_val = ""
|
return_val = ""
|
||||||
@ -195,7 +188,7 @@ class SmaractController(Controller):
|
|||||||
return bool(int(return_val.split(",")[1]))
|
return bool(int(return_val.split(",")[1]))
|
||||||
|
|
||||||
def all_axes_referenced(self) -> bool:
|
def all_axes_referenced(self) -> bool:
|
||||||
return all([self.is_axis_referenced(ax) for ax in self._axis if ax is not None])
|
return all(self.axis_is_referenced(ax) for ax in self._axis if ax is not None)
|
||||||
|
|
||||||
@retry_once
|
@retry_once
|
||||||
@axis_checked
|
@axis_checked
|
||||||
@ -265,8 +258,7 @@ class SmaractController(Controller):
|
|||||||
frequency (int): Frequency in Hz that the steps are performed with. The valid range is 1..18,500. Default: 2000.
|
frequency (int): Frequency in Hz that the steps are performed with. The valid range is 1..18,500. Default: 2000.
|
||||||
"""
|
"""
|
||||||
self.socket_put_and_receive(
|
self.socket_put_and_receive(
|
||||||
f"MST{axis_Id_numeric},{steps},{amplitude},{frequency}",
|
f"MST{axis_Id_numeric},{steps},{amplitude},{frequency}", raise_if_not_status=True
|
||||||
raise_if_not_status=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@retry_once
|
@retry_once
|
||||||
@ -440,14 +432,7 @@ class SmaractController(Controller):
|
|||||||
def describe(self) -> None:
|
def describe(self) -> None:
|
||||||
t = PrettyTable()
|
t = PrettyTable()
|
||||||
t.title = f"{self.__class__.__name__} on {self.sock.host}:{self.sock.port}"
|
t.title = f"{self.__class__.__name__} on {self.sock.host}:{self.sock.port}"
|
||||||
t.field_names = [
|
t.field_names = ["Axis", "Name", "Connected", "Referenced", "Closed Loop Speed", "Position"]
|
||||||
"Axis",
|
|
||||||
"Name",
|
|
||||||
"Connected",
|
|
||||||
"Referenced",
|
|
||||||
"Closed Loop Speed",
|
|
||||||
"Position",
|
|
||||||
]
|
|
||||||
for ax in range(self._axes_per_controller):
|
for ax in range(self._axes_per_controller):
|
||||||
axis = self._axis[ax]
|
axis = self._axis[ax]
|
||||||
if axis is not None:
|
if axis is not None:
|
||||||
@ -512,7 +497,7 @@ class SmaractController(Controller):
|
|||||||
def _message_starts_with(self, msg: str, leading_chars: str) -> bool:
|
def _message_starts_with(self, msg: str, leading_chars: str) -> bool:
|
||||||
if msg.startswith(leading_chars):
|
if msg.startswith(leading_chars):
|
||||||
return True
|
return True
|
||||||
else:
|
raise SmaractCommunicationError(
|
||||||
raise SmaractCommunicationError(
|
f"Expected to receive a return message starting with {leading_chars} but instead"
|
||||||
f"Expected to receive a return message starting with {leading_chars} but instead received '{msg}'"
|
f" received '{msg}'"
|
||||||
)
|
)
|
||||||
|
@ -3,20 +3,17 @@ from utils import SocketMock
|
|||||||
|
|
||||||
from ophyd_devices.smaract import SmaractController
|
from ophyd_devices.smaract import SmaractController
|
||||||
from ophyd_devices.smaract.smaract_controller import SmaractCommunicationMode
|
from ophyd_devices.smaract.smaract_controller import SmaractCommunicationMode
|
||||||
from ophyd_devices.smaract.smaract_errors import (
|
from ophyd_devices.smaract.smaract_errors import SmaractCommunicationError, SmaractErrorCode
|
||||||
SmaractCommunicationError,
|
|
||||||
SmaractErrorCode,
|
|
||||||
)
|
|
||||||
from ophyd_devices.smaract.smaract_ophyd import SmaractMotor
|
from ophyd_devices.smaract.smaract_ophyd import SmaractMotor
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"axis,position,get_message,return_msg",
|
"axis,position,get_message,return_msg",
|
||||||
[
|
[
|
||||||
(0, 50, b":GP0\n", b":P0,50000000"),
|
(0, 50, b":GP0\n", b":P0,50000000\n"),
|
||||||
(1, 0, b":GP1\n", b":P1,0"),
|
(1, 0, b":GP1\n", b":P1,0\n"),
|
||||||
(0, -50, b":GP0\n", b":P0,-50000000"),
|
(0, -50, b":GP0\n", b":P0,-50000000\n"),
|
||||||
(0, -50.23, b":GP0\n", b":P0,-50230000"),
|
(0, -50.23, b":GP0\n", b":P0,-50230000\n"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_get_position(axis, position, get_message, return_msg):
|
def test_get_position(axis, position, get_message, return_msg):
|
||||||
@ -33,10 +30,10 @@ def test_get_position(axis, position, get_message, return_msg):
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"axis,is_referenced,get_message,return_msg,exception",
|
"axis,is_referenced,get_message,return_msg,exception",
|
||||||
[
|
[
|
||||||
(0, True, b":GPPK0\n", b":PPK0,1", None),
|
(0, True, b":GPPK0\n", b":PPK0,1\n", None),
|
||||||
(1, True, b":GPPK1\n", b":PPK1,1", None),
|
(1, True, b":GPPK1\n", b":PPK1,1\n", None),
|
||||||
(0, False, b":GPPK0\n", b":PPK0,0", None),
|
(0, False, b":GPPK0\n", b":PPK0,0\n", None),
|
||||||
(200, False, b":GPPK0\n", b":PPK0,0", ValueError),
|
(200, False, b":GPPK0\n", b":PPK0,0\n", ValueError),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_axis_is_referenced(axis, is_referenced, get_message, return_msg, exception):
|
def test_axis_is_referenced(axis, is_referenced, get_message, return_msg, exception):
|
||||||
@ -57,7 +54,7 @@ def test_axis_is_referenced(axis, is_referenced, get_message, return_msg, except
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"return_msg,exception,raised",
|
"return_msg,exception,raised",
|
||||||
[
|
[
|
||||||
(b"false", SmaractCommunicationError, False),
|
(b"false\n", SmaractCommunicationError, False),
|
||||||
(b":E0,1", SmaractErrorCode, True),
|
(b":E0,1", SmaractErrorCode, True),
|
||||||
(b":E,1", SmaractCommunicationError, True),
|
(b":E,1", SmaractCommunicationError, True),
|
||||||
(b":E,-1", SmaractCommunicationError, True),
|
(b":E,-1", SmaractCommunicationError, True),
|
||||||
@ -79,15 +76,11 @@ def test_socket_put_and_receive_raises_exception(return_msg, exception, raised):
|
|||||||
with pytest.raises(exception):
|
with pytest.raises(exception):
|
||||||
controller.socket_put_and_receive(b"test")
|
controller.socket_put_and_receive(b"test")
|
||||||
else:
|
else:
|
||||||
assert controller.socket_put_and_receive(b"test") == return_msg.decode()
|
assert controller.socket_put_and_receive(b"test") == return_msg.split(b"\n")[0].decode()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"mode,get_message,return_msg",
|
"mode,get_message,return_msg", [(0, b":GCM\n", b":CM0\n"), (1, b":GCM\n", b":CM1\n")]
|
||||||
[
|
|
||||||
(0, b":GCM\n", b":CM0"),
|
|
||||||
(1, b":GCM\n", b":CM1"),
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
def test_communication_mode(mode, get_message, return_msg):
|
def test_communication_mode(mode, get_message, return_msg):
|
||||||
SmaractController._reset_controller()
|
SmaractController._reset_controller()
|
||||||
@ -103,16 +96,16 @@ def test_communication_mode(mode, get_message, return_msg):
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"is_moving,get_message,return_msg",
|
"is_moving,get_message,return_msg",
|
||||||
[
|
[
|
||||||
(0, b":GS0\n", b":S0,0"),
|
(0, b":GS0\n", b":S0,0\n"),
|
||||||
(1, b":GS0\n", b":S0,1"),
|
(1, b":GS0\n", b":S0,1\n"),
|
||||||
(1, b":GS0\n", b":S0,2"),
|
(1, b":GS0\n", b":S0,2\n"),
|
||||||
(0, b":GS0\n", b":S0,3"),
|
(0, b":GS0\n", b":S0,3\n"),
|
||||||
(1, b":GS0\n", b":S0,4"),
|
(1, b":GS0\n", b":S0,4\n"),
|
||||||
(0, b":GS0\n", b":S0,5"),
|
(0, b":GS0\n", b":S0,5\n"),
|
||||||
(0, b":GS0\n", b":S0,6"),
|
(0, b":GS0\n", b":S0,6\n"),
|
||||||
(1, b":GS0\n", b":S0,7"),
|
(1, b":GS0\n", b":S0,7\n"),
|
||||||
(0, b":GS0\n", b":S0,9"),
|
(0, b":GS0\n", b":S0,9\n"),
|
||||||
(0, [b":GS0\n", b":GS0\n"], [b":E0,0", b":S0,9"]),
|
(0, [b":GS0\n", b":GS0\n"], [b":E0,0\n", b":S0,9"]),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_axis_is_moving(is_moving, get_message, return_msg):
|
def test_axis_is_moving(is_moving, get_message, return_msg):
|
||||||
@ -131,9 +124,9 @@ def test_axis_is_moving(is_moving, get_message, return_msg):
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"sensor_id,axis,get_msg,return_msg",
|
"sensor_id,axis,get_msg,return_msg",
|
||||||
[
|
[
|
||||||
(1, 0, b":GST0\n", b":ST0,1"),
|
(1, 0, b":GST0\n", b":ST0,1\n"),
|
||||||
(6, 0, b":GST0\n", b":ST0,6"),
|
(6, 0, b":GST0\n", b":ST0,6\n"),
|
||||||
(6, 1, b":GST1\n", b":ST1,6"),
|
(6, 1, b":GST1\n", b":ST1,6\n"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_get_sensor_definition(sensor_id, axis, get_msg, return_msg):
|
def test_get_sensor_definition(sensor_id, axis, get_msg, return_msg):
|
||||||
@ -191,34 +184,29 @@ def test_move_axis_to_absolute_position(pos, axis, hold_time, get_msg, return_ms
|
|||||||
(
|
(
|
||||||
50,
|
50,
|
||||||
[b":GPPK0\n", b":MPA0,50000000,1000\n", b":GS0\n", b":GP0\n"],
|
[b":GPPK0\n", b":MPA0,50000000,1000\n", b":GS0\n", b":GP0\n"],
|
||||||
[b":PPK0,1", b":E0,0", b":S0,0", b":P0,50000000\n"],
|
[b":PPK0,1\n", b":E0,0\n", b":S0,0\n", b":P0,50000000\n"],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
0,
|
0,
|
||||||
[b":GPPK0\n", b":MPA0,0,1000\n", b":GS0\n", b":GP0\n"],
|
[b":GPPK0\n", b":MPA0,0,1000\n", b":GS0\n", b":GP0\n"],
|
||||||
[b":PPK0,1", b":E0,0", b":S0,0", b":P0,0000000\n"],
|
[b":PPK0,1\n", b":E0,0\n", b":S0,0\n", b":P0,0000000\n"],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
20.23,
|
20.23,
|
||||||
[b":GPPK0\n", b":MPA0,20230000,1000\n", b":GS0\n", b":GP0\n"],
|
[b":GPPK0\n", b":MPA0,20230000,1000\n", b":GS0\n", b":GP0\n"],
|
||||||
[b":PPK0,1", b":E0,0", b":S0,0", b":P0,20230000\n"],
|
[b":PPK0,1\n", b":E0,0\n", b":S0,0\n", b":P0,20230000\n"],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
20.23,
|
20.23,
|
||||||
[b":GPPK0\n", b":GPPK0\n", b":MPA0,20230000,1000\n", b":GS0\n", b":GP0\n"],
|
[b":GPPK0\n", b":GPPK0\n", b":MPA0,20230000,1000\n", b":GS0\n", b":GP0\n"],
|
||||||
[b":S0,0", b":PPK0,1", b":E0,0", b":S0,0", b":P0,20230000\n"],
|
[b":S0,0\n", b":PPK0,1\n", b":E0,0\n", b":S0,0\n", b":P0,20230000\n"],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_move_axis(pos, get_msg, return_msg):
|
def test_move_axis(pos, get_msg, return_msg):
|
||||||
SmaractController._reset_controller()
|
SmaractController._reset_controller()
|
||||||
lsmarA = SmaractMotor(
|
lsmarA = SmaractMotor(
|
||||||
"A",
|
"A", name="lsmarA", host="mpc2680.psi.ch", port=8085, sign=1, socket_cls=SocketMock
|
||||||
name="lsmarA",
|
|
||||||
host="mpc2680.psi.ch",
|
|
||||||
port=8085,
|
|
||||||
sign=1,
|
|
||||||
socket_cls=SocketMock,
|
|
||||||
)
|
)
|
||||||
lsmarA.controller.on()
|
lsmarA.controller.on()
|
||||||
controller = lsmarA.controller
|
controller = lsmarA.controller
|
||||||
@ -228,25 +216,11 @@ def test_move_axis(pos, get_msg, return_msg):
|
|||||||
assert controller.sock.buffer_put == get_msg
|
assert controller.sock.buffer_put == get_msg
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize("num_axes,get_msg,return_msg", [(1, [b":S0\n"], [b":E0,0"])])
|
||||||
"num_axes,get_msg,return_msg",
|
|
||||||
[
|
|
||||||
(
|
|
||||||
1,
|
|
||||||
[b":S0\n"],
|
|
||||||
[b":E0,0"],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_stop_axis(num_axes, get_msg, return_msg):
|
def test_stop_axis(num_axes, get_msg, return_msg):
|
||||||
SmaractController._reset_controller()
|
SmaractController._reset_controller()
|
||||||
lsmarA = SmaractMotor(
|
lsmarA = SmaractMotor(
|
||||||
"A",
|
"A", name="lsmarA", host="mpc2680.psi.ch", port=8085, sign=1, socket_cls=SocketMock
|
||||||
name="lsmarA",
|
|
||||||
host="mpc2680.psi.ch",
|
|
||||||
port=8085,
|
|
||||||
sign=1,
|
|
||||||
socket_cls=SocketMock,
|
|
||||||
)
|
)
|
||||||
lsmarA.stage()
|
lsmarA.stage()
|
||||||
controller = lsmarA.controller
|
controller = lsmarA.controller
|
||||||
|
Loading…
x
Reference in New Issue
Block a user