From ae029161b5ef1276dc1df8fb7af98c4617346fd6 Mon Sep 17 00:00:00 2001 From: Alexei Chetroi Date: Wed, 28 Aug 2019 18:58:40 -0400 Subject: [PATCH] Pop correct future on request timeout. --- tests/test_api.py | 4 ++-- zigpy_deconz/api.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_api.py b/tests/test_api.py index 96599c2..3f358e8 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -59,7 +59,7 @@ def test_commands(): @pytest.mark.asyncio async def test_command(api, monkeypatch): def mock_api_frame(name, *args): - return mock.sentinel.api_frame_data + return mock.sentinel.api_frame_data, api._seq api._api_frame = mock.MagicMock(side_effect=mock_api_frame) api._uart.send = mock.MagicMock() @@ -82,7 +82,7 @@ async def mock_fut(): @pytest.mark.asyncio async def test_command_timeout(api, monkeypatch): def mock_api_frame(name, *args): - return mock.sentinel.api_frame_data + return mock.sentinel.api_frame_data, api._seq api._api_frame = mock.MagicMock(side_effect=mock_api_frame) api._uart.send = mock.MagicMock() diff --git a/zigpy_deconz/api.py b/zigpy_deconz/api.py index 6743297..cf690ed 100644 --- a/zigpy_deconz/api.py +++ b/zigpy_deconz/api.py @@ -126,27 +126,27 @@ def close(self): async def _command(self, name, *args): LOGGER.debug("Command %s %s", name, args) - self._seq = (self._seq % 255) + 1 - data = self._api_frame(name, *args) + data, seq = self._api_frame(name, *args) self._uart.send(data) fut = asyncio.Future() - self._awaiting[self._seq] = fut + self._awaiting[seq] = fut try: return await asyncio.wait_for(fut, timeout=COMMAND_TIMEOUT) except asyncio.TimeoutError: LOGGER.warning("No response to '%s' command", name) - self._awaiting.pop(self._seq) + self._awaiting.pop(seq) raise def _api_frame(self, name, *args): cmd_id, schema = TX_COMMANDS[name] d = t.serialize(args, schema) data = t.uint8_t(cmd_id).serialize() + self._seq = (self._seq % 255) + 1 data += t.uint8_t(self._seq).serialize() data += t.uint8_t(0).serialize() data += t.uint16_t(len(d) + 5).serialize() data += d - return data + return data, self._seq def data_received(self, data): try: