mirror of
				https://github.com/python-kasa/python-kasa.git
				synced 2025-10-31 04:31:54 +00:00 
			
		
		
		
	Add optional error code to exceptions (#585)
This commit is contained in:
		| @@ -130,14 +130,14 @@ class AesTransport(BaseTransport): | ||||
|             return | ||||
|         msg = f"{msg}: {self._host}: {error_code.name}({error_code.value})" | ||||
|         if error_code in SMART_TIMEOUT_ERRORS: | ||||
|             raise TimeoutException(msg) | ||||
|             raise TimeoutException(msg, error_code=error_code) | ||||
|         if error_code in SMART_RETRYABLE_ERRORS: | ||||
|             raise RetryableException(msg) | ||||
|             raise RetryableException(msg, error_code=error_code) | ||||
|         if error_code in SMART_AUTHENTICATION_ERRORS: | ||||
|             self._handshake_done = False | ||||
|             self._login_token = None | ||||
|             raise AuthenticationException(msg) | ||||
|         raise SmartDeviceException(msg) | ||||
|             raise AuthenticationException(msg, error_code=error_code) | ||||
|         raise SmartDeviceException(msg, error_code=error_code) | ||||
|  | ||||
|     async def send_secure_passthrough(self, request: str): | ||||
|         """Send encrypted message as passthrough.""" | ||||
|   | ||||
| @@ -1,10 +1,15 @@ | ||||
| """python-kasa exceptions.""" | ||||
| from enum import IntEnum | ||||
| from typing import Optional | ||||
|  | ||||
|  | ||||
| class SmartDeviceException(Exception): | ||||
|     """Base exception for device errors.""" | ||||
|  | ||||
|     def __init__(self, *args, error_code: Optional["SmartErrorCode"] = None): | ||||
|         self.error_code = error_code | ||||
|         super().__init__(args) | ||||
|  | ||||
|  | ||||
| class UnsupportedDeviceException(SmartDeviceException): | ||||
|     """Exception for trying to connect to unsupported devices.""" | ||||
| @@ -17,14 +22,23 @@ class UnsupportedDeviceException(SmartDeviceException): | ||||
| class AuthenticationException(SmartDeviceException): | ||||
|     """Base exception for device authentication errors.""" | ||||
|  | ||||
|     def __init__(self, *args, error_code: Optional["SmartErrorCode"] = None): | ||||
|         super().__init__(args, error_code) | ||||
|  | ||||
|  | ||||
| class RetryableException(SmartDeviceException): | ||||
|     """Retryable exception for device errors.""" | ||||
|  | ||||
|     def __init__(self, *args, error_code: Optional["SmartErrorCode"] = None): | ||||
|         super().__init__(args, error_code) | ||||
|  | ||||
|  | ||||
| class TimeoutException(SmartDeviceException): | ||||
|     """Timeout exception for device errors.""" | ||||
|  | ||||
|     def __init__(self, *args, error_code: Optional["SmartErrorCode"] = None): | ||||
|         super().__init__(args, error_code) | ||||
|  | ||||
|  | ||||
| class SmartErrorCode(IntEnum): | ||||
|     """Enum for SMART Error Codes.""" | ||||
|   | ||||
| @@ -186,12 +186,12 @@ class SmartProtocol(TPLinkProtocol): | ||||
|         if method := resp_dict.get("method"): | ||||
|             msg += f" for method: {method}" | ||||
|         if error_code in SMART_TIMEOUT_ERRORS: | ||||
|             raise TimeoutException(msg) | ||||
|             raise TimeoutException(msg, error_code=error_code) | ||||
|         if error_code in SMART_RETRYABLE_ERRORS: | ||||
|             raise RetryableException(msg) | ||||
|             raise RetryableException(msg, error_code=error_code) | ||||
|         if error_code in SMART_AUTHENTICATION_ERRORS: | ||||
|             raise AuthenticationException(msg) | ||||
|         raise SmartDeviceException(msg) | ||||
|             raise AuthenticationException(msg, error_code=error_code) | ||||
|         raise SmartDeviceException(msg, error_code=error_code) | ||||
|  | ||||
|     async def close(self) -> None: | ||||
|         """Close the protocol.""" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 sdb9696
					sdb9696