Improve condition validation error msg (#32135)
This commit is contained in:
parent
270758417b
commit
ca01e9a537
2 changed files with 70 additions and 10 deletions
|
@ -704,6 +704,30 @@ def deprecated(
|
|||
return validator
|
||||
|
||||
|
||||
def key_value_schemas(
|
||||
key: str, value_schemas: Dict[str, vol.Schema]
|
||||
) -> Callable[[Any], Dict[str, Any]]:
|
||||
"""Create a validator that validates based on a value for specific key.
|
||||
|
||||
This gives better error messages.
|
||||
"""
|
||||
|
||||
def key_value_validator(value: Any) -> Dict[str, Any]:
|
||||
if not isinstance(value, dict):
|
||||
raise vol.Invalid("Expected a dictionary")
|
||||
|
||||
key_value = value.get(key)
|
||||
|
||||
if key_value not in value_schemas:
|
||||
raise vol.Invalid(
|
||||
f"Unexpected key {key_value}. Expected {', '.join(value_schemas)}"
|
||||
)
|
||||
|
||||
return cast(Dict[str, Any], value_schemas[key_value](value))
|
||||
|
||||
return key_value_validator
|
||||
|
||||
|
||||
# Validator helpers
|
||||
|
||||
|
||||
|
@ -899,16 +923,19 @@ DEVICE_CONDITION_BASE_SCHEMA = vol.Schema(
|
|||
|
||||
DEVICE_CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend({}, extra=vol.ALLOW_EXTRA)
|
||||
|
||||
CONDITION_SCHEMA: vol.Schema = vol.Any(
|
||||
NUMERIC_STATE_CONDITION_SCHEMA,
|
||||
STATE_CONDITION_SCHEMA,
|
||||
SUN_CONDITION_SCHEMA,
|
||||
TEMPLATE_CONDITION_SCHEMA,
|
||||
TIME_CONDITION_SCHEMA,
|
||||
ZONE_CONDITION_SCHEMA,
|
||||
AND_CONDITION_SCHEMA,
|
||||
OR_CONDITION_SCHEMA,
|
||||
DEVICE_CONDITION_SCHEMA,
|
||||
CONDITION_SCHEMA: vol.Schema = key_value_schemas(
|
||||
CONF_CONDITION,
|
||||
{
|
||||
"numeric_state": NUMERIC_STATE_CONDITION_SCHEMA,
|
||||
"state": STATE_CONDITION_SCHEMA,
|
||||
"sun": SUN_CONDITION_SCHEMA,
|
||||
"template": TEMPLATE_CONDITION_SCHEMA,
|
||||
"time": TIME_CONDITION_SCHEMA,
|
||||
"zone": ZONE_CONDITION_SCHEMA,
|
||||
"and": AND_CONDITION_SCHEMA,
|
||||
"or": OR_CONDITION_SCHEMA,
|
||||
"device": DEVICE_CONDITION_SCHEMA,
|
||||
},
|
||||
)
|
||||
|
||||
_SCRIPT_DELAY_SCHEMA = vol.Schema(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue