Exceptions: added StateTransitionFailed and Maintenance Exceptions. ALso BECCommunicationException

This commit is contained in:
appleb_m committed 2026-05-20 11:46:04 +02:00
1 parent e07b5bc9c5
commit c60d2b5303
2 files changed
+69 -1

No files matched your search

+50 -1
View File
@@ -17,6 +17,26 @@ class TransformationInvalidException(Exception):
return self.message
class StateTransitionFailed(Exception):
def __init__(self, message: str = "Beamline state transition failed"):
super().__init__(message)
self.message = message
logger.error(message, extra={"exception:": Exception})
def __str__(self) -> str:
return self.message
class MaintenanceStateException(Exception):
def __init__(self, message: str = "Beamline is in Maintenance state"):
super().__init__(message)
self.message = message
logger.error(message, extra={"exception:": Exception})
def __str__(self) -> str:
return self.message
class DataCollectionException(Exception):
def __init__(self, message: str = "Data collection failed"):
super().__init__(message)
@@ -409,4 +429,33 @@ class MagnetPositionSensorErorr(Exception):
)
def __str__(self) -> str:
return self.message
return self.message
class BECCommunicationError(Exception):
def __init__(
self,
message: str = "BEC communication error",
*,
exception: Exception | None = None,
operation: str | None = None,
endpoint: str | None = None,
base_url: str | None = None,
):
self.message = message
self.operation = operation
self.exception = exception
self.endpoint = endpoint
self.base_url = base_url
logger.error(
message,
extra={
"device": "bec",
"operation": operation,
"endpoint": endpoint,
"base_url": base_url,
"exception": exception,
},
)
def __str__(self) -> str:
return self.message
+19
View File
@@ -13,12 +13,15 @@ from aare.common.exception_handler import (
CriticalTellException,
LoopCenteringFailed,
TransformationInvalidException,
StateTransitionFailed,
MaintenanceStateException,
BeamlineBusyException,
AuthenticationException,
SampleException,
UserRightsException,
SmargonCommunicationError,
TellCommunicationError,
BECCommunicationError,
JFJochCommunicationError,
AerotechCommunicationError,
DataCollectionException,
@@ -237,6 +240,22 @@ def register_exception_handlers(app) -> None:
),
)
@app.exception_handler(BECCommunicationError)
async def bec_comm_handler(request: Request, exc: BECCommunicationError) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_503_SERVICE_UNAVAILABLE,
content=_error_payload(
code="BEC_UNAVAILABLE",
message=str(exc) or "BEC is unavailable",
extra={
"operation": getattr(exc, "operation", None),
"endpoint": getattr(exc, "endpoint", None),
"base_url": getattr(exc, "base_url", None),
},
),
)
@app.exception_handler(JFJochCommunicationError)
async def jfjoch_comm_handler(request: Request, exc: JFJochCommunicationError) -> JSONResponse:
return JSONResponse(