Skip to content

Commit 37241f1

Browse files
authored
Disable retries for requests, deferring to zigpy (#264)
* Disable retries for requests, deferring to zigpy * Remove unnecessary unit test
1 parent 199d5c1 commit 37241f1

File tree

2 files changed

+19
-67
lines changed

2 files changed

+19
-67
lines changed

tests/test_api.py

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -628,43 +628,6 @@ async def test_aps_data_request_relays(relays, api, mock_command_rsp):
628628
assert "has non-trailing optional argument" in str(exc.value)
629629

630630

631-
@patch(
632-
"zigpy_deconz.api.REQUEST_RETRY_DELAYS",
633-
[None if v is None else 0 for v in deconz_api.REQUEST_RETRY_DELAYS],
634-
)
635-
async def test_aps_data_request_retries_busy(api, mock_command_rsp):
636-
await api.connect()
637-
638-
mock_rsp = mock_command_rsp(
639-
command_id=deconz_api.CommandId.aps_data_request,
640-
params={},
641-
rsp={
642-
"status": deconz_api.Status.BUSY,
643-
"frame_length": t.uint16_t(9),
644-
"payload_length": t.uint16_t(2),
645-
"device_state": deconz_api.DeviceState(
646-
network_state=deconz_api.NetworkState2.CONNECTED,
647-
device_state=(
648-
deconz_api.DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE
649-
),
650-
),
651-
"request_id": t.uint8_t(0x00),
652-
},
653-
)
654-
655-
with pytest.raises(deconz_api.CommandError):
656-
await api.aps_data_request(
657-
req_id=0x00,
658-
dst_addr_ep=t.DeconzAddressEndpoint.deserialize(b"\x02\xaa\x55\x01")[0],
659-
profile=0x0104,
660-
cluster=0x0007,
661-
src_ep=1,
662-
aps_payload=b"aps payload",
663-
)
664-
665-
assert len(mock_rsp.mock_calls) == 4
666-
667-
668631
async def test_aps_data_request_retries_failure(api, mock_command_rsp):
669632
await api.connect()
670633

zigpy_deconz/api.py

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
MISMATCHED_RESPONSE_TIMEOUT = 0.5
3737
COMMAND_TIMEOUT = 1.8
3838
PROBE_TIMEOUT = 2
39-
REQUEST_RETRY_DELAYS = (0.5, 1.0, 1.5, None)
4039

4140
FRAME_LENGTH = object()
4241
PAYLOAD_LENGTH = object()
@@ -872,37 +871,27 @@ async def aps_data_request(
872871
assert len(relays) <= 9
873872
flags |= t.DeconzSendDataFlags.RELAYS
874873

875-
for delay in REQUEST_RETRY_DELAYS:
876-
if not self._free_slots_available_event.is_set():
877-
LOGGER.debug("Waiting for free slots to become available")
878-
await self._free_slots_available_event.wait()
874+
if not self._free_slots_available_event.is_set():
875+
LOGGER.debug("Waiting for free slots to become available")
876+
await self._free_slots_available_event.wait()
879877

880-
try:
881-
rsp = await self.send_command(
882-
CommandId.aps_data_request,
883-
request_id=req_id,
884-
flags=flags,
885-
dst=dst_addr_ep,
886-
profile_id=profile,
887-
cluster_id=cluster,
888-
src_ep=src_ep,
889-
asdu=aps_payload,
890-
tx_options=tx_options,
891-
radius=radius,
892-
relays=relays,
893-
)
894-
except CommandError as ex:
895-
LOGGER.debug("'aps_data_request' failure: %s", ex)
896-
if delay is None or ex.status != Status.BUSY:
897-
raise
878+
rsp = await self.send_command(
879+
CommandId.aps_data_request,
880+
request_id=req_id,
881+
flags=flags,
882+
dst=dst_addr_ep,
883+
profile_id=profile,
884+
cluster_id=cluster,
885+
src_ep=src_ep,
886+
asdu=aps_payload,
887+
tx_options=tx_options,
888+
radius=radius,
889+
relays=relays,
890+
)
898891

899-
LOGGER.debug("retrying 'aps_data_request' in %ss", delay)
900-
await asyncio.sleep(delay)
901-
else:
902-
self._handle_device_state_changed(
903-
status=rsp["status"], device_state=rsp["device_state"]
904-
)
905-
return
892+
self._handle_device_state_changed(
893+
status=rsp["status"], device_state=rsp["device_state"]
894+
)
906895

907896
async def get_device_state(self) -> DeviceState:
908897
rsp = await self.send_command(CommandId.device_state)

0 commit comments

Comments
 (0)