From 78a49ecbcecff4a1bc589c74d0bc9c2840008c8d Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:41:37 -0400 Subject: [PATCH] Bump zwave-js-server-python to 0.48.0 (#91989) * Bump zwave-js-server-python to 0.48.0 * Add handling of FailedZWaveCommand exception * Reset mock to avoid unintentional side effects * Fix bump --- .../components/zwave_js/manifest.json | 2 +- homeassistant/components/zwave_js/services.py | 19 ++++++++------ requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/zwave_js/test_services.py | 25 ++++++++++++++++++- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/zwave_js/manifest.json b/homeassistant/components/zwave_js/manifest.json index d41ee0272a9..8452ba2ed32 100644 --- a/homeassistant/components/zwave_js/manifest.json +++ b/homeassistant/components/zwave_js/manifest.json @@ -8,7 +8,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["zwave_js_server"], - "requirements": ["pyserial==3.5", "zwave-js-server-python==0.47.3"], + "requirements": ["pyserial==3.5", "zwave-js-server-python==0.48.0"], "usb": [ { "vid": "0658", diff --git a/homeassistant/components/zwave_js/services.py b/homeassistant/components/zwave_js/services.py index 1c6824920c1..47a16ee1273 100644 --- a/homeassistant/components/zwave_js/services.py +++ b/homeassistant/components/zwave_js/services.py @@ -9,7 +9,7 @@ from typing import Any import voluptuous as vol from zwave_js_server.client import Client as ZwaveClient from zwave_js_server.const import CommandClass, CommandStatus -from zwave_js_server.exceptions import SetValueFailed +from zwave_js_server.exceptions import FailedZWaveCommand, SetValueFailed from zwave_js_server.model.endpoint import Endpoint from zwave_js_server.model.node import Node as ZwaveNode from zwave_js_server.model.value import ValueDataType, get_value_id_str @@ -604,13 +604,16 @@ class ZWaveServices: ): new_value = str(new_value) - success = await async_multicast_set_value( - client=client, - new_value=new_value, - value_data=value, - nodes=None if broadcast else list(nodes), - options=options, - ) + try: + success = await async_multicast_set_value( + client=client, + new_value=new_value, + value_data=value, + nodes=None if broadcast else list(nodes), + options=options, + ) + except FailedZWaveCommand as err: + raise HomeAssistantError("Unable to set value via multicast") from err if success is False: raise HomeAssistantError( diff --git a/requirements_all.txt b/requirements_all.txt index fb7913ba2f2..d7f5be65092 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2745,7 +2745,7 @@ zigpy==0.55.0 zm-py==0.5.2 # homeassistant.components.zwave_js -zwave-js-server-python==0.47.3 +zwave-js-server-python==0.48.0 # homeassistant.components.zwave_me zwave_me_ws==0.4.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index fb8eda38f52..5889b091b66 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1982,7 +1982,7 @@ zigpy-znp==0.11.1 zigpy==0.55.0 # homeassistant.components.zwave_js -zwave-js-server-python==0.47.3 +zwave-js-server-python==0.48.0 # homeassistant.components.zwave_me zwave_me_ws==0.4.2 diff --git a/tests/components/zwave_js/test_services.py b/tests/components/zwave_js/test_services.py index efa8ec985e4..1c57eca2f26 100644 --- a/tests/components/zwave_js/test_services.py +++ b/tests/components/zwave_js/test_services.py @@ -1225,7 +1225,7 @@ async def test_multicast_set_value( blocking=True, ) - # Test that when a command fails we raise an exception + # Test that when a command is unsuccessful we raise an exception client.async_send_command.return_value = {"success": False} with pytest.raises(HomeAssistantError): @@ -1245,6 +1245,29 @@ async def test_multicast_set_value( blocking=True, ) + client.async_send_command.reset_mock() + + # Test that when we get an exception from the library we raise an exception + client.async_send_command.side_effect = FailedZWaveCommand("test", 12, "test") + with pytest.raises(HomeAssistantError): + await hass.services.async_call( + DOMAIN, + SERVICE_MULTICAST_SET_VALUE, + { + ATTR_ENTITY_ID: [ + CLIMATE_DANFOSS_LC13_ENTITY, + CLIMATE_EUROTRONICS_SPIRIT_Z_ENTITY, + ], + ATTR_COMMAND_CLASS: 67, + ATTR_PROPERTY: "setpoint", + ATTR_PROPERTY_KEY: 1, + ATTR_VALUE: 2, + }, + blocking=True, + ) + + client.async_send_command.reset_mock() + # Create a fake node with a different home ID from a real node and patch it into # return of helper function to check the validation for two nodes having different # home IDs