From 40ba182144254f172875e3a6f4004cda9f8e0614 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 3 Feb 2021 11:58:46 +0100 Subject: [PATCH] Upgrade Z-Wave JS Python to 0.17.0 (#45895) --- homeassistant/components/zwave_js/__init__.py | 23 ++++++++++++------- homeassistant/components/zwave_js/api.py | 2 +- .../components/zwave_js/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/zwave_js/conftest.py | 4 ++-- 6 files changed, 21 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/zwave_js/__init__.py b/homeassistant/components/zwave_js/__init__.py index 1a2cdfa7017..01b8f4785c5 100644 --- a/homeassistant/components/zwave_js/__init__.py +++ b/homeassistant/components/zwave_js/__init__.py @@ -45,7 +45,7 @@ from .const import ( from .discovery import async_discover_values from .entity import get_device_id -LOGGER = logging.getLogger(__name__) +LOGGER = logging.getLogger(__package__) CONNECT_TIMEOUT = 10 DATA_CLIENT_LISTEN_TASK = "client_listen_task" DATA_START_PLATFORM_TASK = "start_platform_task" @@ -263,13 +263,20 @@ async def client_listen( driver_ready: asyncio.Event, ) -> None: """Listen with the client.""" + should_reload = True try: await client.listen(driver_ready) + except asyncio.CancelledError: + should_reload = False except BaseZwaveJSServerError: - # The entry needs to be reloaded since a new driver state - # will be acquired on reconnect. - # All model instances will be replaced when the new state is acquired. - hass.async_create_task(hass.config_entries.async_reload(entry.entry_id)) + pass + + # The entry needs to be reloaded since a new driver state + # will be acquired on reconnect. + # All model instances will be replaced when the new state is acquired. + if should_reload: + LOGGER.info("Disconnected from server. Reloading integration") + asyncio.create_task(hass.config_entries.async_reload(entry.entry_id)) async def disconnect_client( @@ -280,14 +287,14 @@ async def disconnect_client( platform_task: asyncio.Task, ) -> None: """Disconnect client.""" - await client.disconnect() - listen_task.cancel() platform_task.cancel() await asyncio.gather(listen_task, platform_task) - LOGGER.info("Disconnected from Zwave JS Server") + if client.connected: + await client.disconnect() + LOGGER.info("Disconnected from Zwave JS Server") async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: diff --git a/homeassistant/components/zwave_js/api.py b/homeassistant/components/zwave_js/api.py index 1a8a197571b..03a917217a9 100644 --- a/homeassistant/components/zwave_js/api.py +++ b/homeassistant/components/zwave_js/api.py @@ -51,7 +51,7 @@ def websocket_network_status( data = { "client": { "ws_server_url": client.ws_server_url, - "state": client.state, + "state": "connected" if client.connected else "disconnected", "driver_version": client.version.driver_version, "server_version": client.version.server_version, }, diff --git a/homeassistant/components/zwave_js/manifest.json b/homeassistant/components/zwave_js/manifest.json index de77ebbf5e0..7df75d7aed2 100644 --- a/homeassistant/components/zwave_js/manifest.json +++ b/homeassistant/components/zwave_js/manifest.json @@ -3,7 +3,7 @@ "name": "Z-Wave JS", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/zwave_js", - "requirements": ["zwave-js-server-python==0.16.0"], + "requirements": ["zwave-js-server-python==0.17.0"], "codeowners": ["@home-assistant/z-wave"], "dependencies": ["http", "websocket_api"] } diff --git a/requirements_all.txt b/requirements_all.txt index 01d6fe0a92a..c25ea05aa33 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2384,4 +2384,4 @@ zigpy==0.32.0 zm-py==0.5.2 # homeassistant.components.zwave_js -zwave-js-server-python==0.16.0 +zwave-js-server-python==0.17.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 95eab6a7440..b156395df13 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1203,4 +1203,4 @@ zigpy-znp==0.3.0 zigpy==0.32.0 # homeassistant.components.zwave_js -zwave-js-server-python==0.16.0 +zwave-js-server-python==0.17.0 diff --git a/tests/components/zwave_js/conftest.py b/tests/components/zwave_js/conftest.py index b5301f4cd2f..984ec42b9f3 100644 --- a/tests/components/zwave_js/conftest.py +++ b/tests/components/zwave_js/conftest.py @@ -157,14 +157,14 @@ def mock_client_fixture(controller_state, version_state): async def connect(): await asyncio.sleep(0) - client.state = "connected" client.connected = True async def listen(driver_ready: asyncio.Event) -> None: driver_ready.set() + await asyncio.sleep(30) + assert False, "Listen wasn't canceled!" async def disconnect(): - client.state = "disconnected" client.connected = False client.connect = AsyncMock(side_effect=connect)