Fix zwave_js.set_value schema (#51114)

* fix zwave_js.set_value schema

* wrap all schemas in vol.Schema

* readd removed assertions
This commit is contained in:
Raman Gupta 2021-05-27 00:27:35 -04:00 committed by GitHub
parent 3e7729faf2
commit 877d3e38b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 75 additions and 46 deletions

View file

@ -67,22 +67,26 @@ class ZWaveServices:
const.DOMAIN, const.DOMAIN,
const.SERVICE_SET_CONFIG_PARAMETER, const.SERVICE_SET_CONFIG_PARAMETER,
self.async_set_config_parameter, self.async_set_config_parameter,
schema=vol.All( schema=vol.Schema(
{ vol.All(
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]), {
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Optional(ATTR_DEVICE_ID): vol.All(
vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Any( cv.ensure_list, [cv.string]
vol.Coerce(int), cv.string ),
), vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
vol.Optional(const.ATTR_CONFIG_PARAMETER_BITMASK): vol.Any( vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Any(
vol.Coerce(int), BITMASK_SCHEMA vol.Coerce(int), cv.string
), ),
vol.Required(const.ATTR_CONFIG_VALUE): vol.Any( vol.Optional(const.ATTR_CONFIG_PARAMETER_BITMASK): vol.Any(
vol.Coerce(int), cv.string vol.Coerce(int), BITMASK_SCHEMA
), ),
}, vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID), vol.Coerce(int), cv.string
parameter_name_does_not_need_bitmask, ),
},
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
parameter_name_does_not_need_bitmask,
),
), ),
) )
@ -90,21 +94,25 @@ class ZWaveServices:
const.DOMAIN, const.DOMAIN,
const.SERVICE_BULK_SET_PARTIAL_CONFIG_PARAMETERS, const.SERVICE_BULK_SET_PARTIAL_CONFIG_PARAMETERS,
self.async_bulk_set_partial_config_parameters, self.async_bulk_set_partial_config_parameters,
schema=vol.All( schema=vol.Schema(
{ vol.All(
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]), {
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Optional(ATTR_DEVICE_ID): vol.All(
vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Coerce(int), cv.ensure_list, [cv.string]
vol.Required(const.ATTR_CONFIG_VALUE): vol.Any( ),
vol.Coerce(int), vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
{ vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Coerce(int),
vol.Any( vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
vol.Coerce(int), BITMASK_SCHEMA, cv.string vol.Coerce(int),
): vol.Any(vol.Coerce(int), cv.string) {
}, vol.Any(
), vol.Coerce(int), BITMASK_SCHEMA, cv.string
}, ): vol.Any(vol.Coerce(int), cv.string)
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID), },
),
},
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
),
), ),
) )
@ -125,21 +133,27 @@ class ZWaveServices:
const.SERVICE_SET_VALUE, const.SERVICE_SET_VALUE,
self.async_set_value, self.async_set_value,
schema=vol.Schema( schema=vol.Schema(
{ vol.All(
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]), {
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Optional(ATTR_DEVICE_ID): vol.All(
vol.Required(const.ATTR_COMMAND_CLASS): vol.Coerce(int), cv.ensure_list, [cv.string]
vol.Required(const.ATTR_PROPERTY): vol.Any(vol.Coerce(int), str), ),
vol.Optional(const.ATTR_PROPERTY_KEY): vol.Any( vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
vol.Coerce(int), str vol.Required(const.ATTR_COMMAND_CLASS): vol.Coerce(int),
), vol.Required(const.ATTR_PROPERTY): vol.Any(
vol.Optional(const.ATTR_ENDPOINT): vol.Coerce(int), vol.Coerce(int), str
vol.Required(const.ATTR_VALUE): vol.Any( ),
bool, vol.Coerce(int), vol.Coerce(float), cv.string vol.Optional(const.ATTR_PROPERTY_KEY): vol.Any(
), vol.Coerce(int), str
vol.Optional(const.ATTR_WAIT_FOR_RESULT): vol.Coerce(bool), ),
}, vol.Optional(const.ATTR_ENDPOINT): vol.Coerce(int),
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID), vol.Required(const.ATTR_VALUE): vol.Any(
bool, vol.Coerce(int), vol.Coerce(float), cv.string
),
vol.Optional(const.ATTR_WAIT_FOR_RESULT): vol.Coerce(bool),
},
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
),
), ),
) )

View file

@ -599,6 +599,7 @@ async def test_set_value(hass, client, climate_danfoss_lc_13, integration):
) )
assert len(client.async_send_command.call_args_list) == 1 assert len(client.async_send_command.call_args_list) == 1
args = client.async_send_command.call_args[0][0] args = client.async_send_command.call_args[0][0]
assert args["command"] == "node.set_value" assert args["command"] == "node.set_value"
assert args["nodeId"] == 5 assert args["nodeId"] == 5
@ -619,3 +620,17 @@ async def test_set_value(hass, client, climate_danfoss_lc_13, integration):
"value": 0, "value": 0,
} }
assert args["value"] == 2 assert args["value"] == 2
# Test missing device and entities keys
with pytest.raises(vol.MultipleInvalid):
await hass.services.async_call(
DOMAIN,
SERVICE_SET_VALUE,
{
ATTR_COMMAND_CLASS: 117,
ATTR_PROPERTY: "local",
ATTR_VALUE: 2,
ATTR_WAIT_FOR_RESULT: True,
},
blocking=True,
)