From 22347381bca59f7e9547b19fee3943427b2a5d2b Mon Sep 17 00:00:00 2001 From: Teemu R Date: Mon, 3 Jun 2024 20:41:55 +0200 Subject: [PATCH] Do not raise on multi-request errors on child devices (#949) This will avoid crashing when some commands return an error on multi-requests on child devices. Idea from https://github.com/python-kasa/python-kasa/pull/900/files#r1624803457 --- kasa/smartprotocol.py | 4 +++- kasa/tests/test_smartprotocol.py | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kasa/smartprotocol.py b/kasa/smartprotocol.py index b1cde04d..545f8147 100644 --- a/kasa/smartprotocol.py +++ b/kasa/smartprotocol.py @@ -402,7 +402,9 @@ class _ChildProtocolWrapper(SmartProtocol): ret_val = {} for multi_response in multi_responses: method = multi_response["method"] - self._handle_response_error_code(multi_response, method) + self._handle_response_error_code( + multi_response, method, raise_on_error=False + ) ret_val[method] = multi_response.get("result") return ret_val diff --git a/kasa/tests/test_smartprotocol.py b/kasa/tests/test_smartprotocol.py index a2bcacfa..5a0eb0fa 100644 --- a/kasa/tests/test_smartprotocol.py +++ b/kasa/tests/test_smartprotocol.py @@ -181,8 +181,9 @@ async def test_childdevicewrapper_multiplerequest_error(dummy_protocol, mocker): } wrapped_protocol = _ChildProtocolWrapper("dummyid", dummy_protocol) mocker.patch.object(wrapped_protocol._transport, "send", return_value=mock_response) - with pytest.raises(KasaException): - await wrapped_protocol.query(DUMMY_QUERY) + res = await wrapped_protocol.query(DUMMY_QUERY) + assert res["get_device_info"] == {"foo": "bar"} + assert res["invalid_command"] == SmartErrorCode(-1001) @pytest.mark.parametrize("list_sum", [5, 10, 30])