tell_backend: all exceptions where being caught and squashed/renamed. Hopefully fixed, may lead to strange error behaviours for other fails.
Build and Publish / test (push) Failing after 2m6s
Build and Publish / build (push) Skipped
Build and Publish / Build and Deploy Docs (push) Skipped

This commit is contained in:
2026-07-02 17:37:29 +02:00
parent 1b7c254654
commit 7d20534c60
2 changed files with 80 additions and 2 deletions
+16 -2
View File
@@ -503,7 +503,14 @@ class AareDAQ:
f"Original error: {error}"
)
logger.critical(message)
raise CriticalTellException(message) from error
raise JFJochCommunicationError(
message,
operation=getattr(error, "operation", None),
endpoint=getattr(error, "endpoint", None),
base_url=getattr(error, "base_url", None),
status_code=getattr(error, "status_code", None),
critical=True,
) from error
def _raise_if_critical_bec_error(
self,
@@ -520,7 +527,14 @@ class AareDAQ:
f"Original error: {error}"
)
logger.critical(message)
raise CriticalTellException(message) from error
raise BECCommunicationError(
message,
operation=getattr(error, "operation", None),
endpoint=getattr(error, "endpoint", None),
base_url=getattr(error, "base_url", None),
exception=getattr(error, "exception", None),
critical=True,
) from error
def _ensure_not_in_maintenance(self, *, context: str) -> None:
if self.__cfg.state == BeamlineStateEnum.Maintenance:
+64
View File
@@ -5,6 +5,7 @@ from unittest.mock import MagicMock
import pytest
from aareDB import SampleEventType
from aare.common.exception_handler import BECCommunicationError, JFJochCommunicationError
from aare.common.models import DewarAddress, SampleShortInfo, DAQOperation
from aare.common.tell_models import TellActivityEnum, TellPhaseEnum, TellStateModel
from aare.daq.config import ABR_POS_MOUNT, BeamlineStateEnum
@@ -56,6 +57,7 @@ def test_create_mounting_service_builds_expected_context(mock_logger, bare_daq):
assert service.ctx.deps.devs is bare_daq._AareDAQ__devs
assert service.ctx.settings.mount_position == ABR_POS_MOUNT
def test_was_previous_sample_unmounted_since_prefers_tell_phase_confirmation():
previous_sample = _make_sample(1, "old")
daq = _make_daq(previous_sample)
@@ -208,6 +210,68 @@ def test_execute_mount_and_prepare_unmount_success_uses_unmount_operation():
assert daq._AareDAQ__set_state.call_args_list[-1].args[0] == BeamlineStateEnum.SampleAlignment
def test_raise_if_critical_jfjoch_detector_error_preserves_jfjoch_exception_family():
daq = object.__new__(AareDAQ)
original = JFJochCommunicationError(
"DAQ state error: detector must be idle",
operation="measure",
endpoint="/measurement/start",
base_url="http://detector",
status_code=500,
)
with pytest.raises(JFJochCommunicationError) as exc_info:
daq._raise_if_critical_jfjoch_detector_error(original, command="wait_till_done")
exc = exc_info.value
assert "Critical detector error while running JFJoch command 'wait_till_done'" in str(exc)
assert exc.operation == "measure"
assert exc.endpoint == "/measurement/start"
assert exc.base_url == "http://detector"
assert exc.status_code == 500
assert exc.critical is True
assert exc.__cause__ is original
def test_raise_if_critical_bec_error_preserves_bec_exception_family():
daq = object.__new__(AareDAQ)
original_exc = RuntimeError("planner disconnected")
original = BECCommunicationError(
"BEC operation failed",
operation="planner.move_to:data_collection",
endpoint="/bec",
base_url="redis://bec",
exception=original_exc,
)
with pytest.raises(BECCommunicationError) as exc_info:
daq._raise_if_critical_bec_error(original, command="planner.move_to:data_collection")
exc = exc_info.value
assert "Critical BEC error while running 'planner.move_to:data_collection'" in str(exc)
assert exc.operation == "planner.move_to:data_collection"
assert exc.endpoint == "/bec"
assert exc.base_url == "redis://bec"
assert exc.exception is original_exc
assert exc.critical is True
assert exc.__cause__ is original
def test_raise_if_critical_jfjoch_detector_error_ignores_non_critical_jfjoch_errors():
daq = object.__new__(AareDAQ)
original = JFJochCommunicationError(
"temporary detector hiccup",
operation="measure",
endpoint="/measurement/start",
status_code=503,
)
assert daq._raise_if_critical_jfjoch_detector_error(original, command="wait_till_done") is None
def test_create_loop_centering_service_uses_shared_screenshot_service():
daq = object.__new__(AareDAQ)
daq._AareDAQ__cfg = SimpleNamespace()