Server: updated server_exception_handler.py and also error_codes.py to cover all custom exceptions
Build and Publish / build (push) Successful in 19s
Build and Publish / Build and Deploy Docs (push) Successful in 58s

This commit is contained in:
2026-04-23 17:22:36 +02:00
parent 0685d35086
commit e5ffbb9b18
2 changed files with 184 additions and 1 deletions
+99
View File
@@ -21,6 +21,17 @@ from aare.common.exception_handler import (
TellCommunicationError,
JFJochCommunicationError,
AerotechCommunicationError,
DataCollectionException,
RasterScanException,
UnmountingFailed,
AXCFailed,
AareDBCommunicationError,
MagnetPositionSensorErorr,
ManualMountException,
SmartMagnetFaultException,
TellMountFailedException,
TellCommandWhileBusyException,
TellConnectionException,
)
logger = setup_logger("aareDAQ")
@@ -56,6 +67,13 @@ def register_exception_handlers(app) -> None:
content=_error_payload(code="MOUNTING_FAILED", message=str(exc)),
)
@app.exception_handler(UnmountingFailed)
async def unmounting_failed_handler(request: Request, exc: UnmountingFailed) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_500_INTERNAL_SERVER_ERROR,
content=_error_payload(code="UNMOUNTING_FAILED", message=str(exc) or "Failed to unmount sample"),
)
@app.exception_handler(WarningTellException)
async def warning_tell_handler(request: Request, exc: WarningTellException) -> JSONResponse:
return JSONResponse(
@@ -77,6 +95,13 @@ def register_exception_handlers(app) -> None:
content=_error_payload(code="LOOP_CENTERING_FAILED", message=str(exc)),
)
@app.exception_handler(AXCFailed)
async def axc_failed_handler(request: Request, exc: AXCFailed) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_500_INTERNAL_SERVER_ERROR,
content=_error_payload(code="AXC_FAILED", message=str(exc) or "Auto X-ray centering failed"),
)
@app.exception_handler(TransformationInvalidException)
async def transformation_invalid_handler(request: Request, exc: TransformationInvalidException) -> JSONResponse:
return JSONResponse(
@@ -91,6 +116,20 @@ def register_exception_handlers(app) -> None:
content=_error_payload(code="BEAMLINE_BUSY", message=str(exc) or "Beamline is busy"),
)
@app.exception_handler(DataCollectionException)
async def data_collection_failed_handler(request: Request, exc: DataCollectionException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_500_INTERNAL_SERVER_ERROR,
content=_error_payload(code="DATA_COLLECTION_FAILED", message=str(exc) or "Data collection failed"),
)
@app.exception_handler(RasterScanException)
async def raster_scan_failed_handler(request: Request, exc: RasterScanException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_500_INTERNAL_SERVER_ERROR,
content=_error_payload(code="RASTER_SCAN_FAILED", message=str(exc) or "Raster scan failed"),
)
@app.exception_handler(AuthenticationException)
async def authentication_exception_handler(request: Request, exc: AuthenticationException) -> JSONResponse:
return JSONResponse(
@@ -120,6 +159,41 @@ def register_exception_handlers(app) -> None:
content=_error_payload(code="SAMPLE_NOT_FOUND", message=str(exc) or "Sample not found"),
)
@app.exception_handler(ManualMountException)
async def manual_mount_handler(request: Request, exc: ManualMountException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_409_CONFLICT,
content=_error_payload(code="MANUAL_MOUNT_REQUIRED", message=str(exc) or "Manual mount intervention required"),
)
@app.exception_handler(SmartMagnetFaultException)
async def smart_magnet_fault_handler(request: Request, exc: SmartMagnetFaultException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_503_SERVICE_UNAVAILABLE,
content=_error_payload(code="SMART_MAGNET_FAULT", message=str(exc) or "Smart magnet fault"),
)
@app.exception_handler(TellMountFailedException)
async def tell_mount_failed_handler(request: Request, exc: TellMountFailedException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_409_CONFLICT,
content=_error_payload(code="TELL_MOUNT_FAILED", message=str(exc) or "TELL mount failed"),
)
@app.exception_handler(TellCommandWhileBusyException)
async def tell_busy_handler(request: Request, exc: TellCommandWhileBusyException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_409_CONFLICT,
content=_error_payload(code="TELL_BUSY", message=str(exc) or "TELL is busy"),
)
@app.exception_handler(TellConnectionException)
async def tell_connection_error_handler(request: Request, exc: TellConnectionException) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_503_SERVICE_UNAVAILABLE,
content=_error_payload(code="TELL_CONNECTION_ERROR", message=str(exc) or "TELL connection error"),
)
@app.exception_handler(SmargonCommunicationError)
async def smargon_comm_handler(request: Request, exc: SmargonCommunicationError) -> JSONResponse:
return JSONResponse(
@@ -134,6 +208,21 @@ def register_exception_handlers(app) -> None:
),
)
@app.exception_handler(AareDBCommunicationError)
async def aaredb_comm_handler(request: Request, exc: AareDBCommunicationError) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_503_SERVICE_UNAVAILABLE,
content=_error_payload(
code="AAREDB_UNAVAILABLE",
message=str(exc) or "AareDB is unavailable",
extra={
"operation": getattr(exc, "operation", None),
"endpoint": getattr(exc, "endpoint", None),
"base_url": getattr(exc, "base_url", None),
},
),
)
@app.exception_handler(TellCommunicationError)
async def tell_comm_handler(request: Request, exc: TellCommunicationError) -> JSONResponse:
return JSONResponse(
@@ -178,6 +267,16 @@ def register_exception_handlers(app) -> None:
),
)
@app.exception_handler(MagnetPositionSensorErorr)
async def magnet_position_sensor_handler(request: Request, exc: MagnetPositionSensorErorr) -> JSONResponse:
return JSONResponse(
status_code=api_status.HTTP_500_INTERNAL_SERVER_ERROR,
content=_error_payload(
code="MAGNET_POSITION_SENSOR_ERROR",
message=str(exc) or "Magnet position sensor error",
),
)
@app.exception_handler(Exception)
async def unhandled_exception_handler(request: Request, exc: Exception) -> JSONResponse:
logger.exception(f"Unhandled server exception: {exc}")