Fix/graphics and recovery #136
@@ -191,7 +191,7 @@ class MainWindow(QMainWindow):
|
||||
# default) so the mutable list is per-instance (RUF012).
|
||||
self._pre_vacancy_open_banners: list[TitleLabel] = []
|
||||
|
||||
self._theme_mode = THEME_SUNRISE
|
||||
self._theme_mode = THEME_BLUEBIRD
|
||||
self._theme_action_group = None
|
||||
self._use_legacy_theme_action = None
|
||||
self._use_portrait_theme_action = None
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import logging
|
||||
|
||||
from aarecommon.config.logger import attach_to_logger, find_existing_formatter
|
||||
from PySide6.QtCore import QTimer, Signal, Slot
|
||||
from PySide6.QtWidgets import (
|
||||
@@ -221,6 +223,8 @@ class LogPanel(QWidget):
|
||||
self.emitter.message.connect(self._append_line)
|
||||
|
||||
self.handler = QtLogHandler(self.emitter)
|
||||
# hide debug message from log panel
|
||||
self.handler.setLevel(logging.INFO)
|
||||
self.handler.setFormatter(find_existing_formatter())
|
||||
|
||||
def attach_logger(self, logger_name: str = "aareGUI"):
|
||||
|
||||
@@ -713,7 +713,10 @@ class DAQWorker(QObject):
|
||||
try:
|
||||
response_data = self.handle_response(reply)
|
||||
payload = json.loads(response_data) if response_data else {}
|
||||
message = str(payload.get("message") or default_message)
|
||||
if not isinstance(payload, dict):
|
||||
message = str(payload)
|
||||
else:
|
||||
message = str(payload.get("message") or default_message)
|
||||
logger.info(message)
|
||||
self.status_message.emit(message, False)
|
||||
self.recovery_action_completed.emit(message)
|
||||
|
||||
@@ -623,7 +623,7 @@ class StatusBar(QStatusBar):
|
||||
self.get_all_pgroups.emit()
|
||||
|
||||
def _generate_pgroup_dialogue(self, curr: str | None = None, pgroups: list | None = None):
|
||||
logger.info(pgroups)
|
||||
# logger.info(pgroups) # too much information for normal operation
|
||||
dialog = PGroupDialog(curr_pgroup=curr, pgroups=pgroups, parent=self.window())
|
||||
|
||||
if dialog.exec() == QDialog.DialogCode.Accepted:
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
"""Covers the recovery-response payload handling in DAQWorker.
|
||||
|
||||
The server may return a bare JSON string instead of a dict during recovery
|
||||
(see fix "allow str has no get when in recovery"), so the handler must not
|
||||
assume ``payload.get`` exists.
|
||||
"""
|
||||
|
||||
import json
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from aare.gui.threads.daq_worker import DAQWorker
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def worker(qapp):
|
||||
w = DAQWorker(base_url=None, token="test-token")
|
||||
w._timer.stop() # no background polling during tests
|
||||
w.send_status_request = MagicMock()
|
||||
return w
|
||||
|
||||
|
||||
def run_recovery(worker, response_data, default="default recovery message"):
|
||||
worker.handle_response = MagicMock(return_value=response_data)
|
||||
slot = MagicMock()
|
||||
worker.recovery_action_completed.connect(slot)
|
||||
worker._handle_recovery_action_response(MagicMock(), default)
|
||||
return slot
|
||||
|
||||
|
||||
def test_recovery_response_dict_payload(worker):
|
||||
slot = run_recovery(worker, json.dumps({"message": "TELL recovered"}))
|
||||
slot.assert_called_once_with("TELL recovered")
|
||||
|
||||
|
||||
def test_recovery_response_dict_without_message_uses_default(worker):
|
||||
slot = run_recovery(worker, json.dumps({"status": "ok"}), default="fallback")
|
||||
slot.assert_called_once_with("fallback")
|
||||
|
||||
|
||||
def test_recovery_response_str_payload(worker):
|
||||
# A bare JSON string has no .get(); must be passed through as-is.
|
||||
slot = run_recovery(worker, json.dumps("plain string status"))
|
||||
slot.assert_called_once_with("plain string status")
|
||||
Reference in New Issue
Block a user