tell_backend: all exceptions where being caught and squashed/renamed. Hopefully fixed, may lead to strange error behaviours for other fails.
This commit is contained in:
+16
-2
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user