1 """Schemas for the blueprint integration."""
5 import voluptuous
as vol
32 """Validate a Home Assistant version."""
33 if not isinstance(value, str):
34 raise vol.Invalid(
"Version needs to be a string")
36 parts = value.split(
".")
39 raise vol.Invalid(
"Version needs to be formatted as {major}.{minor}.{patch}")
42 [
int(p)
for p
in parts]
45 "Major, minor and patch version needs to be an integer"
52 """Validate the inputs don't have duplicate keys under different sections."""
54 for key, value
in inputs.items():
55 if value
and CONF_INPUT
in value:
56 for key
in value[CONF_INPUT]:
58 raise vol.Invalid(f
"Duplicate use of input key {key} in blueprint.")
62 raise vol.Invalid(f
"Duplicate use of input key {key} in blueprint.")
70 """Return if it is a blueprint config."""
71 return isinstance(config, dict)
and CONF_BLUEPRINT
in config
76 """Return if it is a blueprint instance config."""
77 return isinstance(config, dict)
and CONF_USE_BLUEPRINT
in config
80 BLUEPRINT_INPUT_SCHEMA = vol.Schema(
82 vol.Optional(CONF_NAME): str,
83 vol.Optional(CONF_DESCRIPTION): str,
84 vol.Optional(CONF_DEFAULT): cv.match_all,
85 vol.Optional(CONF_SELECTOR): selector.validate_selector,
89 BLUEPRINT_INPUT_SECTION_SCHEMA = vol.Schema(
91 vol.Optional(CONF_NAME): str,
92 vol.Optional(CONF_ICON): str,
93 vol.Optional(CONF_DESCRIPTION): str,
94 vol.Optional(CONF_COLLAPSED): bool,
95 vol.Required(CONF_INPUT, default=dict): {
98 BLUEPRINT_INPUT_SCHEMA,
104 BLUEPRINT_SCHEMA = vol.Schema(
106 vol.Required(CONF_BLUEPRINT): vol.Schema(
108 vol.Required(CONF_NAME): str,
109 vol.Optional(CONF_DESCRIPTION): str,
110 vol.Required(CONF_DOMAIN): str,
111 vol.Optional(CONF_SOURCE_URL): cv.url,
112 vol.Optional(CONF_AUTHOR): str,
113 vol.Optional(CONF_HOMEASSISTANT): {
114 vol.Optional(CONF_MIN_VERSION): version_validator
116 vol.Optional(CONF_INPUT, default=dict): vol.All(
120 BLUEPRINT_INPUT_SCHEMA,
121 BLUEPRINT_INPUT_SECTION_SCHEMA,
124 unique_input_validator,
129 extra=vol.ALLOW_EXTRA,
134 """Validate value has a YAML suffix."""
135 if not value.endswith(
".yaml"):
136 raise vol.Invalid(
"Path needs to end in .yaml")
140 BLUEPRINT_INSTANCE_FIELDS = vol.Schema(
142 vol.Required(CONF_USE_BLUEPRINT): vol.Schema(
144 vol.Required(CONF_PATH): vol.All(cv.path, validate_yaml_suffix),
145 vol.Required(CONF_INPUT, default=dict): {str: cv.match_all},
149 extra=vol.ALLOW_EXTRA,
bool is_blueprint_config(Any config)
str validate_yaml_suffix(str value)
bool is_blueprint_instance_config(Any config)
Any unique_input_validator(Any inputs)
str version_validator(Any value)