core/homeassistant/components/zwave_js/config_validation.py

42 lines
1.0 KiB
Python

"""Config validation for the Z-Wave JS integration."""
from typing import Any
import voluptuous as vol
import homeassistant.helpers.config_validation as cv
# Validates that a bitmask is provided in hex form and converts it to decimal
# int equivalent since that's what the library uses
BITMASK_SCHEMA = vol.All(
cv.string,
vol.Lower,
vol.Match(
r"^(0x)?[0-9a-f]+$",
msg="Must provide an integer (e.g. 255) or a bitmask in hex form (e.g. 0xff)",
),
lambda value: int(value, 16),
)
def boolean(value: Any) -> bool:
"""Validate and coerce a boolean value."""
if isinstance(value, bool):
return value
if isinstance(value, str):
value = value.lower().strip()
if value in ("true", "yes", "on", "enable"):
return True
if value in ("false", "no", "off", "disable"):
return False
raise vol.Invalid(f"invalid boolean value {value}")
VALUE_SCHEMA = vol.Any(
boolean,
vol.Coerce(int),
vol.Coerce(float),
BITMASK_SCHEMA,
cv.string,
dict,
)