Handle KeyboardInterrupts in the cli better (#1391)

Addresses an issue with how `asyncclick` deals with `KeyboardInterrupt`
errors. Instead of the `click.main` receiving `KeyboardInterrupt` it
receives `CancelledError` because it's a task running inside the loop.

Also ensures that discovery catches the `CancelledError` and closes the
http clients.
This commit is contained in:
Steven B.
2024-12-20 13:21:38 +00:00
committed by GitHub
parent fe88b52e19
commit 296af3192e
2 changed files with 18 additions and 1 deletions

View File

@@ -498,7 +498,7 @@ class Discover:
try:
_LOGGER.debug("Waiting %s seconds for responses...", discovery_timeout)
await protocol.wait_for_discovery_to_complete()
except KasaException as ex:
except (KasaException, asyncio.CancelledError) as ex:
for device in protocol.discovered_devices.values():
await device.protocol.close()
raise ex