FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Consider handshake as still valid on ServerDisconnectedError · Issue #676 · python-kasa/python-kasa · GitHub

Repository navigation

Consider handshake as still valid on ServerDisconnectedError #676

Closed

Description

ServerDisconnectedError seems to be normal behavior for the device and the next query is successful. We shouldn't redo the handshake in this case

diff --git a/kasa/httpclient.py b/kasa/httpclient.py
index a4bd84a..c03cd78 100644
--- a/kasa/httpclient.py
+++ b/kasa/httpclient.py
@@ -64,8 +64,13 @@ class HttpClient:
                     response_data = await resp.read()
                     if json:
                         response_data = json_loads(response_data.decode())
-
-        except (aiohttp.ServerDisconnectedError, aiohttp.ClientOSError) as ex:
+        except aiohttp.ServerDisconnectedError as ex:
+            # Server disconnected error is raised when the device closes the connection
+            # before the request is completed. This is normal behavior for the device.
+            raise DisconnectedException(
+                f"Device disconnected: {self._config.host}: {ex}", ex
+            ) from ex
+        except aiohttp.ClientOSError as ex:
             raise ConnectionException(
                 f"Unable to connect to the device: {self._config.host}: {ex}", ex
             ) from ex
diff --git a/kasa/smartprotocol.py b/kasa/smartprotocol.py
index c28db94..b7464f9 100644
--- a/kasa/smartprotocol.py
+++ b/kasa/smartprotocol.py
@@ -65,6 +65,14 @@ class SmartProtocol(BaseProtocol):
         for retry in range(retry_count + 1):
             try:
                 return await self._execute_query(request, retry)
+            except DisconnectedException as dex:
+                # Do not call close() here as the connection is already closed
+                # this is is a normal behavior for the device. Its likely that
+                # the credentials are not expired and the next query will succeed.
+                if retry >= retry_count:
+                    _LOGGER.debug("Giving up on %s after %s retries", self._host, retry)
+                    raise dex
+                continue
             except ConnectionException as sdex:
                 await self.close()
                 if retry >= retry_count:

Activity

  1. added this to the 0.6.0.2 milestone on Jan 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions


      Back | FazBrowse Home | New Git URL