From a88b677776b5e207003a69b2d64bd880b0df2a84 Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Wed, 23 Oct 2024 20:07:32 +0100 Subject: [PATCH] Combine smartcamera error codes into SmartErrorCode (#1190) Having these in a seperate place complicates the code unnecessarily. --- kasa/exceptions.py | 49 +++++++++++++++++ kasa/experimental/smartcamera.py | 2 +- kasa/experimental/sslaestransport.py | 82 ++-------------------------- 3 files changed, 54 insertions(+), 79 deletions(-) diff --git a/kasa/exceptions.py b/kasa/exceptions.py index e32e9fd1..9172cfc3 100644 --- a/kasa/exceptions.py +++ b/kasa/exceptions.py @@ -127,6 +127,53 @@ class SmartErrorCode(IntEnum): DST_ERROR = -2301 DST_SAVE_ERROR = -2302 + SYSTEM_ERROR = -40101 + INVALID_ARGUMENTS = -40209 + + # Camera error codes + SESSION_EXPIRED = -40401 + HOMEKIT_LOGIN_FAIL = -40412 + DEVICE_BLOCKED = -40404 + DEVICE_FACTORY = -40405 + OUT_OF_LIMIT = -40406 + OTHER_ERROR = -40407 + SYSTEM_BLOCKED = -40408 + NONCE_EXPIRED = -40409 + FFS_NONE_PWD = -90000 + TIMEOUT_ERROR = 40108 + UNSUPPORTED_METHOD = -40106 + ONE_SECOND_REPEAT_REQUEST = -40109 + INVALID_NONCE = -40413 + PROTOCOL_FORMAT_ERROR = -40210 + IP_CONFLICT = -40321 + DIAGNOSE_TYPE_NOT_SUPPORT = -69051 + DIAGNOSE_TASK_FULL = -69052 + DIAGNOSE_TASK_BUSY = -69053 + DIAGNOSE_INTERNAL_ERROR = -69055 + DIAGNOSE_ID_NOT_FOUND = -69056 + DIAGNOSE_TASK_NULL = -69057 + CLOUD_LINK_DOWN = -69060 + ONVIF_SET_WRONG_TIME = -69061 + CLOUD_NTP_NO_RESPONSE = -69062 + CLOUD_GET_WRONG_TIME = -69063 + SNTP_SRV_NO_RESPONSE = -69064 + SNTP_GET_WRONG_TIME = -69065 + LINK_UNCONNECTED = -69076 + WIFI_SIGNAL_WEAK = -69077 + LOCAL_NETWORK_POOR = -69078 + CLOUD_NETWORK_POOR = -69079 + INTER_NETWORK_POOR = -69080 + DNS_TIMEOUT = -69081 + DNS_ERROR = -69082 + PING_NO_RESPONSE = -69083 + DHCP_MULTI_SERVER = -69084 + DHCP_ERROR = -69085 + STREAM_SESSION_CLOSE = -69094 + STREAM_BITRATE_EXCEPTION = -69095 + STREAM_FULL = -69096 + STREAM_NO_INTERNET = -69097 + HARDWIRED_NOT_FOUND = -72101 + # Library internal for unknown error codes INTERNAL_UNKNOWN_ERROR = -100_000 # Library internal for query errors @@ -138,6 +185,7 @@ SMART_RETRYABLE_ERRORS = [ SmartErrorCode.HTTP_TRANSPORT_FAILED_ERROR, SmartErrorCode.UNSPECIFIC_ERROR, SmartErrorCode.SESSION_TIMEOUT_ERROR, + SmartErrorCode.SESSION_EXPIRED, ] SMART_AUTHENTICATION_ERRORS = [ @@ -146,4 +194,5 @@ SMART_AUTHENTICATION_ERRORS = [ SmartErrorCode.AES_DECODE_FAIL_ERROR, SmartErrorCode.HAND_SHAKE_FAILED_ERROR, SmartErrorCode.TRANSPORT_UNKNOWN_CREDENTIALS_ERROR, + SmartErrorCode.HOMEKIT_LOGIN_FAIL, ] diff --git a/kasa/experimental/smartcamera.py b/kasa/experimental/smartcamera.py index 809ac74a..b70ef5df 100644 --- a/kasa/experimental/smartcamera.py +++ b/kasa/experimental/smartcamera.py @@ -3,8 +3,8 @@ from __future__ import annotations from ..device_type import DeviceType +from ..exceptions import SmartErrorCode from ..smart import SmartDevice -from .sslaestransport import SmartErrorCode class SmartCamera(SmartDevice): diff --git a/kasa/experimental/sslaestransport.py b/kasa/experimental/sslaestransport.py index fa3e6920..f095a11e 100644 --- a/kasa/experimental/sslaestransport.py +++ b/kasa/experimental/sslaestransport.py @@ -9,8 +9,7 @@ import logging import secrets import ssl import time -from enum import Enum, IntEnum, auto -from functools import cache +from enum import Enum, auto from typing import TYPE_CHECKING, Any, Dict, cast from yarl import URL @@ -19,9 +18,12 @@ from ..aestransport import AesEncyptionSession from ..credentials import Credentials from ..deviceconfig import DeviceConfig from ..exceptions import ( + SMART_AUTHENTICATION_ERRORS, + SMART_RETRYABLE_ERRORS, AuthenticationError, DeviceError, KasaException, + SmartErrorCode, _RetryableError, ) from ..httpclient import HttpClient @@ -433,79 +435,3 @@ class SslAesTransport(BaseTransport): self._seq = 0 self._pwd_hash = None self._local_nonce = None - - -class SmartErrorCode(IntEnum): - """Smart error codes for this transport.""" - - def __str__(self): - return f"{self.name}({self.value})" - - @staticmethod - @cache - def from_int(value: int) -> SmartErrorCode: - """Convert an integer to a SmartErrorCode.""" - return SmartErrorCode(value) - - SUCCESS = 0 - - SYSTEM_ERROR = -40101 - INVALID_ARGUMENTS = -40209 - - # Camera error codes - SESSION_EXPIRED = -40401 - HOMEKIT_LOGIN_FAIL = -40412 - DEVICE_BLOCKED = -40404 - DEVICE_FACTORY = -40405 - OUT_OF_LIMIT = -40406 - OTHER_ERROR = -40407 - SYSTEM_BLOCKED = -40408 - NONCE_EXPIRED = -40409 - FFS_NONE_PWD = -90000 - TIMEOUT_ERROR = 40108 - UNSUPPORTED_METHOD = -40106 - ONE_SECOND_REPEAT_REQUEST = -40109 - INVALID_NONCE = -40413 - PROTOCOL_FORMAT_ERROR = -40210 - IP_CONFLICT = -40321 - DIAGNOSE_TYPE_NOT_SUPPORT = -69051 - DIAGNOSE_TASK_FULL = -69052 - DIAGNOSE_TASK_BUSY = -69053 - DIAGNOSE_INTERNAL_ERROR = -69055 - DIAGNOSE_ID_NOT_FOUND = -69056 - DIAGNOSE_TASK_NULL = -69057 - CLOUD_LINK_DOWN = -69060 - ONVIF_SET_WRONG_TIME = -69061 - CLOUD_NTP_NO_RESPONSE = -69062 - CLOUD_GET_WRONG_TIME = -69063 - SNTP_SRV_NO_RESPONSE = -69064 - SNTP_GET_WRONG_TIME = -69065 - LINK_UNCONNECTED = -69076 - WIFI_SIGNAL_WEAK = -69077 - LOCAL_NETWORK_POOR = -69078 - CLOUD_NETWORK_POOR = -69079 - INTER_NETWORK_POOR = -69080 - DNS_TIMEOUT = -69081 - DNS_ERROR = -69082 - PING_NO_RESPONSE = -69083 - DHCP_MULTI_SERVER = -69084 - DHCP_ERROR = -69085 - STREAM_SESSION_CLOSE = -69094 - STREAM_BITRATE_EXCEPTION = -69095 - STREAM_FULL = -69096 - STREAM_NO_INTERNET = -69097 - HARDWIRED_NOT_FOUND = -72101 - - # Library internal for unknown error codes - INTERNAL_UNKNOWN_ERROR = -100_000 - # Library internal for query errors - INTERNAL_QUERY_ERROR = -100_001 - - -SMART_RETRYABLE_ERRORS = [ - SmartErrorCode.SESSION_EXPIRED, -] - -SMART_AUTHENTICATION_ERRORS = [ - SmartErrorCode.HOMEKIT_LOGIN_FAIL, -]