From 0225bb1e3b26eb7c0a0b06d464968e5857c670a3 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Wed, 25 Mar 2026 13:21:02 +0100 Subject: [PATCH] Exception handler p- added exceptions for JFJOCH, Aerotech and AareDB communication errors --- src/aare/common/exception_handler.py | 101 +++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/aare/common/exception_handler.py b/src/aare/common/exception_handler.py index 9a81665d..7012fc78 100644 --- a/src/aare/common/exception_handler.py +++ b/src/aare/common/exception_handler.py @@ -195,5 +195,106 @@ class TellCommunicationError(Exception): }, ) + def __str__(self) -> str: + return self.message + +class JFJochCommunicationError(Exception): + """ + Raised when JFJoch HTTP/API communication fails. + Intended for scan-time fallbacks and GUI-visible alerts. + """ + + def __init__( + self, + message: str = "JFJoch communication error", + *, + operation: str | None = None, + endpoint: str | None = None, + base_url: str | None = None, + status_code: int | None = None, + ): + super().__init__(message) + self.message = message + self.operation = operation + self.endpoint = endpoint + self.base_url = base_url + self.status_code = status_code + logger.error( + message, + extra={ + "device": "jfjjoch", + "operation": operation, + "endpoint": endpoint, + "base_url": base_url, + "status_code": status_code, + }, + ) + + def __str__(self) -> str: + return self.message + +class AareDBCommunicationError(Exception): + """Raised when AareDB HTTPS communication fails.""" + def __init__( + self, + message: str = "AareDB communication error", + *, + operation: str | None = None, + endpoint: str | None = None, + base_url: str | None = None, + status_code: int | None = None, + ): + super().__init__(message) + self.message = message + self.operation = operation + self.endpoint = endpoint + self.base_url = base_url + self.status_code = status_code + logger.error( + message, + extra={ + "device": "aaredb", + "operation": operation, + "endpoint": endpoint, + "base_url": base_url, + "status_code": status_code, + }, + ) + + def __str__(self) -> str: + return self.message + +class AerotechCommunicationError(Exception): + """ + Raised when Aerotech HTTP/API communication fails (connection refused, timeout, bad HTTP status, etc). + Keep the original exception in `__cause__` by using `raise ... from e`. + """ + + def __init__( + self, + message: str = "Aerotech communication error", + *, + endpoint: str | None = None, + base_url: str | None = None, + operation: str | None = None, + status_code: int | None = None, + ): + super().__init__(message) + self.message = message + self.endpoint = endpoint + self.base_url = base_url + self.operation = operation + self.status_code = status_code + logger.error( + message, + extra={ + "device": "aerotech", + "operation": operation, + "endpoint": endpoint, + "base_url": base_url, + "status_code": status_code, + }, + ) + def __str__(self) -> str: return self.message \ No newline at end of file