From 43bd6d4718cc63d4d8fb366dbe778a0935463d8d Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 31 Oct 2024 10:47:20 +0000 Subject: [PATCH 01/14] Added widgets to display current mirror angle --- finesse/gui/stepper_motor_view.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index b94b1acb9..0085ed216 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -1,7 +1,8 @@ """Code for controlling the stepper motor which moves the mirror.""" from pubsub import pub -from PySide6.QtWidgets import QButtonGroup, QGridLayout, QPushButton, QSpinBox +from PySide6.QtCore import Qt +from PySide6.QtWidgets import QButtonGroup, QGridLayout, QLabel, QPushButton, QSpinBox from finesse.config import ANGLE_PRESETS, STEPPER_MOTOR_TOPIC from finesse.gui.device_panel import DevicePanel @@ -37,6 +38,12 @@ def __init__(self) -> None: layout.addWidget(self.angle, 1, 2) layout.addWidget(self.goto, 1, 3) + # Create widgets to show the current mirror position + layout.addWidget(QLabel("Current position"), 0, 4) + self.mirror_position_display = QLabel("") + self.mirror_position_display.setAlignment(Qt.AlignmentFlag.AlignCenter) + layout.addWidget(self.mirror_position_display, 1, 4) + self.setLayout(layout) def _add_checkable_button(self, name: str) -> QPushButton: From da835de7f5782f128e20c91c7954bb946088677b Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 31 Oct 2024 12:42:01 +0000 Subject: [PATCH 02/14] Added function to display current mirror angle --- finesse/gui/stepper_motor_view.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index 0085ed216..a64e6a68b 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -46,6 +46,11 @@ def __init__(self) -> None: self.setLayout(layout) + pub.subscribe( + self._update_mirror_position_display, + f"device.{STEPPER_MOTOR_TOPIC}.move.end", + ) + def _add_checkable_button(self, name: str) -> QPushButton: """Add a selectable button to button_group.""" btn = QPushButton(name) @@ -58,7 +63,25 @@ def _add_checkable_button(self, name: str) -> QPushButton: def _preset_clicked(self, btn: QPushButton) -> None: """Move the stepper motor to preset position.""" # If the motor is already moving, stop it now + pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.notify_on_stopped") pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.stop") target = float(self.angle.value()) if btn is self.goto else btn.text().lower() pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.move.begin", target=target) + + def _update_mirror_position_display(self, moved_to: float | None) -> None: + """Display the angle the mirror has moved to. + + moved_to will be None if mirror is moving, in which case display "Moving...", + otherwise, display angle or its associated name. + """ + if moved_to is None: + self.mirror_position_display.setText("Moving...") + else: + if moved_to in ANGLE_PRESETS.values(): + preset = list(ANGLE_PRESETS.keys())[ + list(ANGLE_PRESETS.values()).index(moved_to) + ] + self.mirror_position_display.setText(preset.upper()) + else: + self.mirror_position_display.setText(f"{moved_to}°") From 5238c16ad21d659cfb79cd4b423eca507982c16e Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 31 Oct 2024 12:44:12 +0000 Subject: [PATCH 03/14] Broadcast angled moved to when move is finished --- finesse/hardware/plugins/stepper_motor/dummy.py | 2 +- finesse/hardware/plugins/stepper_motor/st10_controller.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/finesse/hardware/plugins/stepper_motor/dummy.py b/finesse/hardware/plugins/stepper_motor/dummy.py index 419485014..d7b69419a 100644 --- a/finesse/hardware/plugins/stepper_motor/dummy.py +++ b/finesse/hardware/plugins/stepper_motor/dummy.py @@ -98,4 +98,4 @@ def _on_move_end(self) -> None: logging.info("Move finished") if self._notify_requested: self._notify_requested = False - self.send_message("move.end") + self.send_message("move.end", moved_to=self.angle) diff --git a/finesse/hardware/plugins/stepper_motor/st10_controller.py b/finesse/hardware/plugins/stepper_motor/st10_controller.py index bca35a71b..3e1ac0ca7 100644 --- a/finesse/hardware/plugins/stepper_motor/st10_controller.py +++ b/finesse/hardware/plugins/stepper_motor/st10_controller.py @@ -232,7 +232,7 @@ def _on_initial_move_end(self) -> None: @Slot() def _send_move_end_message(self) -> None: - self.send_message("move.end") + self.send_message("move.end", moved_to=self.angle) def _check_device_id(self) -> None: """Check that the ID is the correct one for an ST10. From 9daacad7ce084785a732090c3bb8d17d80c8cfda Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 31 Oct 2024 13:32:05 +0000 Subject: [PATCH 04/14] Check angle is broadcast with move.end --- .../stepper_motor/test_dummy_stepper_motor.py | 4 +++- .../plugins/stepper_motor/test_st10_controller.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/hardware/plugins/stepper_motor/test_dummy_stepper_motor.py b/tests/hardware/plugins/stepper_motor/test_dummy_stepper_motor.py index 5a82cedb8..68ff18bb5 100644 --- a/tests/hardware/plugins/stepper_motor/test_dummy_stepper_motor.py +++ b/tests/hardware/plugins/stepper_motor/test_dummy_stepper_motor.py @@ -133,7 +133,9 @@ def test_on_move_end_notify( stepper._move_end_timer.timeout.emit() assert not stepper._notify_requested - sendmsg_mock.assert_called_once_with(f"device.{STEPPER_MOTOR_TOPIC}.move.end") + sendmsg_mock.assert_called_once_with( + f"device.{STEPPER_MOTOR_TOPIC}.move.end", moved_to=stepper.angle + ) def test_on_move_end_no_notify( diff --git a/tests/hardware/plugins/stepper_motor/test_st10_controller.py b/tests/hardware/plugins/stepper_motor/test_st10_controller.py index 5b244a9be..6f272dc2d 100644 --- a/tests/hardware/plugins/stepper_motor/test_st10_controller.py +++ b/tests/hardware/plugins/stepper_motor/test_st10_controller.py @@ -137,10 +137,19 @@ def test_on_initial_move_end(dev: ST10Controller) -> None: signal_mock.assert_called_once_with() -def test_send_move_end_message(sendmsg_mock: MagicMock, dev: ST10Controller) -> None: +@patch( + "finesse.hardware.plugins.stepper_motor.st10_controller.ST10Controller.angle", + new_callable=PropertyMock, +) +def test_send_move_end_message( + angle_mock: PropertyMock, sendmsg_mock: MagicMock, dev: ST10Controller +) -> None: """Test the _send_move_end_message() method.""" + angle_mock.return_value = 12.34 dev._send_move_end_message() - sendmsg_mock.assert_called_once_with(f"device.{STEPPER_MOTOR_TOPIC}.move.end") + sendmsg_mock.assert_called_once_with( + f"device.{STEPPER_MOTOR_TOPIC}.move.end", moved_to=12.34 + ) def read_mock(dev: ST10Controller, return_value: str): From 40ab83604d743976d7d86e8755f92f837af54799 Mon Sep 17 00:00:00 2001 From: Dan Cummins <45606273+dc2917@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:41:54 +0000 Subject: [PATCH 05/14] Use empty QLabel constructor Co-authored-by: Alex Dewar --- finesse/gui/stepper_motor_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index a64e6a68b..387bcdf85 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -40,7 +40,7 @@ def __init__(self) -> None: # Create widgets to show the current mirror position layout.addWidget(QLabel("Current position"), 0, 4) - self.mirror_position_display = QLabel("") + self.mirror_position_display = QLabel() self.mirror_position_display.setAlignment(Qt.AlignmentFlag.AlignCenter) layout.addWidget(self.mirror_position_display, 1, 4) From ad93ea92f2fb5a793020dc1f5ef595191d897f2a Mon Sep 17 00:00:00 2001 From: Dan Cummins <45606273+dc2917@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:07:26 +0000 Subject: [PATCH 06/14] Improve extracting position preset name from angle Co-authored-by: Alex Dewar --- finesse/gui/stepper_motor_view.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index 387bcdf85..d68d02d20 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -78,10 +78,8 @@ def _update_mirror_position_display(self, moved_to: float | None) -> None: if moved_to is None: self.mirror_position_display.setText("Moving...") else: - if moved_to in ANGLE_PRESETS.values(): - preset = list(ANGLE_PRESETS.keys())[ - list(ANGLE_PRESETS.values()).index(moved_to) - ] + preset = next((k for k, v in ANGLE_PRESETS.items() if v == moved_to), None) + if preset: self.mirror_position_display.setText(preset.upper()) else: self.mirror_position_display.setText(f"{moved_to}°") From 125cb0789efe7f50e116d69d07f48e06c2a651ee Mon Sep 17 00:00:00 2001 From: Dan Cummins <45606273+dc2917@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:21:31 +0000 Subject: [PATCH 07/14] Bugfix: send notify_on_stopped after stop to display last angle Co-authored-by: Alex Dewar --- finesse/gui/stepper_motor_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index d68d02d20..da80744b2 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -63,9 +63,9 @@ def _add_checkable_button(self, name: str) -> QPushButton: def _preset_clicked(self, btn: QPushButton) -> None: """Move the stepper motor to preset position.""" # If the motor is already moving, stop it now - pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.notify_on_stopped") pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.stop") + pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.notify_on_stopped") target = float(self.angle.value()) if btn is self.goto else btn.text().lower() pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.move.begin", target=target) From 973ca1be0db05299d49675860d16628af403c03b Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Mon, 4 Nov 2024 18:17:40 +0000 Subject: [PATCH 08/14] Added method to base stepper motor class to send angle moved to --- finesse/hardware/plugins/stepper_motor/dummy.py | 2 +- .../hardware/plugins/stepper_motor/stepper_motor_base.py | 4 ++++ .../hardware/plugins/stepper_motor/test_st10_controller.py | 7 ++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/finesse/hardware/plugins/stepper_motor/dummy.py b/finesse/hardware/plugins/stepper_motor/dummy.py index d7b69419a..4d7d06d80 100644 --- a/finesse/hardware/plugins/stepper_motor/dummy.py +++ b/finesse/hardware/plugins/stepper_motor/dummy.py @@ -98,4 +98,4 @@ def _on_move_end(self) -> None: logging.info("Move finished") if self._notify_requested: self._notify_requested = False - self.send_message("move.end", moved_to=self.angle) + self.send_move_end_message() diff --git a/finesse/hardware/plugins/stepper_motor/stepper_motor_base.py b/finesse/hardware/plugins/stepper_motor/stepper_motor_base.py index 3d9617fd6..fa448791d 100644 --- a/finesse/hardware/plugins/stepper_motor/stepper_motor_base.py +++ b/finesse/hardware/plugins/stepper_motor/stepper_motor_base.py @@ -103,3 +103,7 @@ def move_to(self, target: float | str) -> None: raise ValueError("Angle must be between 0° and 270°") self.step = round(self.steps_per_rotation * target / 360.0) + + def send_move_end_message(self) -> None: + """Send a message containing the angle moved to, once move ends.""" + self.send_message("move.end", moved_to=self.angle) diff --git a/tests/hardware/plugins/stepper_motor/test_st10_controller.py b/tests/hardware/plugins/stepper_motor/test_st10_controller.py index 6f272dc2d..a7de3109b 100644 --- a/tests/hardware/plugins/stepper_motor/test_st10_controller.py +++ b/tests/hardware/plugins/stepper_motor/test_st10_controller.py @@ -8,7 +8,6 @@ import pytest from serial import SerialException, SerialTimeoutException -from finesse.config import STEPPER_MOTOR_TOPIC from finesse.hardware.plugins.stepper_motor.st10_controller import ( ST10Controller, ST10ControllerError, @@ -146,10 +145,8 @@ def test_send_move_end_message( ) -> None: """Test the _send_move_end_message() method.""" angle_mock.return_value = 12.34 - dev._send_move_end_message() - sendmsg_mock.assert_called_once_with( - f"device.{STEPPER_MOTOR_TOPIC}.move.end", moved_to=12.34 - ) + dev.send_move_end_message() + sendmsg_mock.assert_called_once() def read_mock(dev: ST10Controller, return_value: str): From 80bf9476cae82c55cbe748c2da21a22b5667b4eb Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 7 Nov 2024 11:14:10 +0000 Subject: [PATCH 09/14] Test creation of mirror position display widgets --- tests/gui/test_stepper_motor_view.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/gui/test_stepper_motor_view.py b/tests/gui/test_stepper_motor_view.py index afb1cbb36..87d5d5827 100644 --- a/tests/gui/test_stepper_motor_view.py +++ b/tests/gui/test_stepper_motor_view.py @@ -29,6 +29,10 @@ def test_init(button_group_mock: Mock, qtbot: QtBot) -> None: # Check that there's also a goto button assert "goto" in btn_labels + # Check that mirror position widgets have been created + assert control.layout().itemAt(8).widget().text() == "Current position" + assert control.mirror_position_display.text() == "" + @pytest.mark.parametrize("preset", ANGLE_PRESETS.keys()) def test_preset_clicked(preset: str, sendmsg_mock: MagicMock, qtbot: QtBot) -> None: From da14bdd1481cd7c554856723181f86de2987c42d Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 7 Nov 2024 11:46:34 +0000 Subject: [PATCH 10/14] Test update of mirror position display text --- tests/gui/test_stepper_motor_view.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/gui/test_stepper_motor_view.py b/tests/gui/test_stepper_motor_view.py index 87d5d5827..209c4febb 100644 --- a/tests/gui/test_stepper_motor_view.py +++ b/tests/gui/test_stepper_motor_view.py @@ -66,3 +66,17 @@ def test_goto_clicked(sendmsg_mock: MagicMock, qtbot: QtBot) -> None: sendmsg_mock.assert_any_call( f"device.{STEPPER_MOTOR_TOPIC}.move.begin", target=123.0 ) + + +def test_update_mirror_position_display(qtbot: QtBot) -> None: + """Test the mirror position display updates correctly.""" + control = StepperMotorControl() + + control._update_mirror_position_display(moved_to=None) + assert control.mirror_position_display.text() == "Moving..." + + control._update_mirror_position_display(moved_to=ANGLE_PRESETS["zenith"]) + assert control.mirror_position_display.text() == "ZENITH" + + control._update_mirror_position_display(moved_to=12.34) + assert control.mirror_position_display.text() == "12.34" + "\u00b0" From 93a4efd904afb6e10f5b9a70d8d0caf78d19380e Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 7 Nov 2024 11:58:30 +0000 Subject: [PATCH 11/14] Satisfy mypy --- tests/gui/test_stepper_motor_view.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/gui/test_stepper_motor_view.py b/tests/gui/test_stepper_motor_view.py index 209c4febb..7c0ae30c1 100644 --- a/tests/gui/test_stepper_motor_view.py +++ b/tests/gui/test_stepper_motor_view.py @@ -4,7 +4,7 @@ from unittest.mock import MagicMock, Mock, patch import pytest -from PySide6.QtWidgets import QButtonGroup, QPushButton +from PySide6.QtWidgets import QButtonGroup, QLabel, QPushButton from pytestqt.qtbot import QtBot from finesse.config import ANGLE_PRESETS, STEPPER_MOTOR_TOPIC @@ -30,7 +30,9 @@ def test_init(button_group_mock: Mock, qtbot: QtBot) -> None: assert "goto" in btn_labels # Check that mirror position widgets have been created - assert control.layout().itemAt(8).widget().text() == "Current position" + current_position_label = control.layout().itemAt(8).widget() + assert isinstance(current_position_label, QLabel) + assert current_position_label.text() == "Current position" assert control.mirror_position_display.text() == "" From 0064b0e67c6227683e691ca8fbf69d87b7c19919 Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Mon, 11 Nov 2024 11:27:07 +0000 Subject: [PATCH 12/14] Indicate when mirror is moving --- finesse/gui/stepper_motor_view.py | 25 +++++++++++++++---------- tests/gui/test_stepper_motor_view.py | 9 +++++++-- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index da80744b2..4735df23a 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -46,6 +46,10 @@ def __init__(self) -> None: self.setLayout(layout) + pub.subscribe( + self._indicate_moving, + f"device.{STEPPER_MOTOR_TOPIC}.move.begin", + ) pub.subscribe( self._update_mirror_position_display, f"device.{STEPPER_MOTOR_TOPIC}.move.end", @@ -69,17 +73,18 @@ def _preset_clicked(self, btn: QPushButton) -> None: target = float(self.angle.value()) if btn is self.goto else btn.text().lower() pub.sendMessage(f"device.{STEPPER_MOTOR_TOPIC}.move.begin", target=target) - def _update_mirror_position_display(self, moved_to: float | None) -> None: + def _indicate_moving(self, target) -> None: + """Update the display the indicate that the mirror is moving.""" + self.mirror_position_display.setText("Moving...") + + def _update_mirror_position_display(self, moved_to: float) -> None: """Display the angle the mirror has moved to. - moved_to will be None if mirror is moving, in which case display "Moving...", - otherwise, display angle or its associated name. + If angle corresponds to a preset, show the associated name, otherwise just show + the value. """ - if moved_to is None: - self.mirror_position_display.setText("Moving...") + preset = next((k for k, v in ANGLE_PRESETS.items() if v == moved_to), None) + if preset: + self.mirror_position_display.setText(preset.upper()) else: - preset = next((k for k, v in ANGLE_PRESETS.items() if v == moved_to), None) - if preset: - self.mirror_position_display.setText(preset.upper()) - else: - self.mirror_position_display.setText(f"{moved_to}°") + self.mirror_position_display.setText(f"{moved_to}°") diff --git a/tests/gui/test_stepper_motor_view.py b/tests/gui/test_stepper_motor_view.py index 7c0ae30c1..4da8d36d0 100644 --- a/tests/gui/test_stepper_motor_view.py +++ b/tests/gui/test_stepper_motor_view.py @@ -70,13 +70,18 @@ def test_goto_clicked(sendmsg_mock: MagicMock, qtbot: QtBot) -> None: ) -def test_update_mirror_position_display(qtbot: QtBot) -> None: +def test_indicate_moving(qtbot: QtBot) -> None: """Test the mirror position display updates correctly.""" control = StepperMotorControl() - control._update_mirror_position_display(moved_to=None) + control._indicate_moving(target="target") assert control.mirror_position_display.text() == "Moving..." + +def test_update_mirror_position_display(qtbot: QtBot) -> None: + """Test the mirror position display updates correctly.""" + control = StepperMotorControl() + control._update_mirror_position_display(moved_to=ANGLE_PRESETS["zenith"]) assert control.mirror_position_display.text() == "ZENITH" From 7b1a7f1f85a0d8a079dd31bfca9bc6fc7607c42f Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Mon, 11 Nov 2024 11:32:52 +0000 Subject: [PATCH 13/14] Display angle value as well as preset name --- finesse/gui/stepper_motor_view.py | 12 +++++------- tests/gui/test_stepper_motor_view.py | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/finesse/gui/stepper_motor_view.py b/finesse/gui/stepper_motor_view.py index 4735df23a..1d517deba 100644 --- a/finesse/gui/stepper_motor_view.py +++ b/finesse/gui/stepper_motor_view.py @@ -80,11 +80,9 @@ def _indicate_moving(self, target) -> None: def _update_mirror_position_display(self, moved_to: float) -> None: """Display the angle the mirror has moved to. - If angle corresponds to a preset, show the associated name, otherwise just show - the value. + If angle corresponds to a preset, show the associated name as well as the value. """ - preset = next((k for k, v in ANGLE_PRESETS.items() if v == moved_to), None) - if preset: - self.mirror_position_display.setText(preset.upper()) - else: - self.mirror_position_display.setText(f"{moved_to}°") + text = f"{moved_to}°" + if preset := next((k for k, v in ANGLE_PRESETS.items() if v == moved_to), None): + text += f" ({preset})" + self.mirror_position_display.setText(text) diff --git a/tests/gui/test_stepper_motor_view.py b/tests/gui/test_stepper_motor_view.py index 4da8d36d0..19218de9f 100644 --- a/tests/gui/test_stepper_motor_view.py +++ b/tests/gui/test_stepper_motor_view.py @@ -83,7 +83,7 @@ def test_update_mirror_position_display(qtbot: QtBot) -> None: control = StepperMotorControl() control._update_mirror_position_display(moved_to=ANGLE_PRESETS["zenith"]) - assert control.mirror_position_display.text() == "ZENITH" + assert control.mirror_position_display.text() == "180.0\u00b0 (zenith)" control._update_mirror_position_display(moved_to=12.34) assert control.mirror_position_display.text() == "12.34" + "\u00b0" From e04340a5f72ac1b9e98914148cf8b51f6ae2b983 Mon Sep 17 00:00:00 2001 From: Daniel Cummins Date: Thu, 14 Nov 2024 19:36:00 +0000 Subject: [PATCH 14/14] Remove unused _send_move_end_message --- finesse/hardware/plugins/stepper_motor/st10_controller.py | 8 ++------ tests/gui/test_stepper_motor_view.py | 2 +- .../plugins/stepper_motor/test_st10_controller.py | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/finesse/hardware/plugins/stepper_motor/st10_controller.py b/finesse/hardware/plugins/stepper_motor/st10_controller.py index 3e1ac0ca7..839e6a302 100644 --- a/finesse/hardware/plugins/stepper_motor/st10_controller.py +++ b/finesse/hardware/plugins/stepper_motor/st10_controller.py @@ -10,7 +10,7 @@ import logging from queue import Queue -from PySide6.QtCore import QThread, QTimer, Signal, Slot +from PySide6.QtCore import QThread, QTimer, Signal from serial import Serial, SerialException, SerialTimeoutException from finesse.config import STEPPER_MOTOR_HOMING_TIMEOUT @@ -225,15 +225,11 @@ def _on_initial_move_end(self) -> None: # For future move end messages, use a different handler self._reader.async_read_completed.disconnect(self._on_initial_move_end) - self._reader.async_read_completed.connect(self._send_move_end_message) + self._reader.async_read_completed.connect(self.send_move_end_message) # Signal that this device is ready to be used self.signal_is_opened() - @Slot() - def _send_move_end_message(self) -> None: - self.send_message("move.end", moved_to=self.angle) - def _check_device_id(self) -> None: """Check that the ID is the correct one for an ST10. diff --git a/tests/gui/test_stepper_motor_view.py b/tests/gui/test_stepper_motor_view.py index 19218de9f..23bd36ba2 100644 --- a/tests/gui/test_stepper_motor_view.py +++ b/tests/gui/test_stepper_motor_view.py @@ -86,4 +86,4 @@ def test_update_mirror_position_display(qtbot: QtBot) -> None: assert control.mirror_position_display.text() == "180.0\u00b0 (zenith)" control._update_mirror_position_display(moved_to=12.34) - assert control.mirror_position_display.text() == "12.34" + "\u00b0" + assert control.mirror_position_display.text() == "12.34\u00b0" diff --git a/tests/hardware/plugins/stepper_motor/test_st10_controller.py b/tests/hardware/plugins/stepper_motor/test_st10_controller.py index a7de3109b..ae1ebdcb3 100644 --- a/tests/hardware/plugins/stepper_motor/test_st10_controller.py +++ b/tests/hardware/plugins/stepper_motor/test_st10_controller.py @@ -130,7 +130,7 @@ def test_on_initial_move_end(dev: ST10Controller) -> None: dev._on_initial_move_end ) reader_mock.async_read_completed.connect.assert_called_once_with( - dev._send_move_end_message + dev.send_move_end_message ) timer_mock.stop.assert_called_once_with() signal_mock.assert_called_once_with() @@ -143,7 +143,7 @@ def test_on_initial_move_end(dev: ST10Controller) -> None: def test_send_move_end_message( angle_mock: PropertyMock, sendmsg_mock: MagicMock, dev: ST10Controller ) -> None: - """Test the _send_move_end_message() method.""" + """Test the send_move_end_message() method.""" angle_mock.return_value = 12.34 dev.send_move_end_message() sendmsg_mock.assert_called_once()