mirror of
https://github.com/home-assistant/core.git
synced 2026-04-21 06:55:46 +00:00
Move CONF_CONDITION to base condition schema
By the time the condition schema is validated, the correct condition platform is already ensured. This removes the need to specify it in individual condition schemas and making them in line with triggers.
This commit is contained in:
@@ -7,7 +7,7 @@ from typing import cast
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.const import CONF_CONDITION, SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET
|
||||
from homeassistant.const import SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.condition import (
|
||||
@@ -25,7 +25,6 @@ _CONDITION_SCHEMA = vol.All(
|
||||
vol.Schema(
|
||||
{
|
||||
**cv.CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "sun",
|
||||
vol.Optional("before"): cv.sun_event,
|
||||
vol.Optional("before_offset"): cv.time_period,
|
||||
vol.Optional("after"): vol.All(
|
||||
|
||||
@@ -8,7 +8,6 @@ from homeassistant.const import (
|
||||
ATTR_GPS_ACCURACY,
|
||||
ATTR_LATITUDE,
|
||||
ATTR_LONGITUDE,
|
||||
CONF_CONDITION,
|
||||
CONF_ENTITY_ID,
|
||||
CONF_ZONE,
|
||||
STATE_UNAVAILABLE,
|
||||
@@ -29,7 +28,6 @@ from . import in_zone
|
||||
_CONDITION_SCHEMA = vol.Schema(
|
||||
{
|
||||
**cv.CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "zone",
|
||||
vol.Required(CONF_ENTITY_ID): cv.entity_ids,
|
||||
vol.Required("zone"): cv.entity_ids,
|
||||
# To support use_trigger_value in automation
|
||||
|
||||
@@ -1516,16 +1516,21 @@ NUMERIC_STATE_THRESHOLD_SCHEMA = vol.Any(
|
||||
vol.All(str, entity_domain(["input_number", "number", "sensor", "zone"])),
|
||||
)
|
||||
|
||||
CONDITION_BASE_SCHEMA: VolDictType = {
|
||||
|
||||
_CONDITION_COMMON_SCHEMA: VolDictType = {
|
||||
vol.Optional(CONF_ALIAS): string,
|
||||
vol.Optional(CONF_ENABLED): vol.Any(boolean, template),
|
||||
}
|
||||
|
||||
CONDITION_BASE_SCHEMA: VolDictType = {
|
||||
**_CONDITION_COMMON_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): str,
|
||||
}
|
||||
|
||||
NUMERIC_STATE_CONDITION_SCHEMA = vol.All(
|
||||
vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "numeric_state",
|
||||
vol.Required(CONF_ENTITY_ID): entity_ids_or_uuids,
|
||||
vol.Optional(CONF_ATTRIBUTE): str,
|
||||
CONF_BELOW: NUMERIC_STATE_THRESHOLD_SCHEMA,
|
||||
@@ -1538,7 +1543,6 @@ NUMERIC_STATE_CONDITION_SCHEMA = vol.All(
|
||||
|
||||
STATE_CONDITION_BASE_SCHEMA = {
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "state",
|
||||
vol.Required(CONF_ENTITY_ID): entity_ids_or_uuids,
|
||||
vol.Optional(CONF_MATCH, default=ENTITY_MATCH_ALL): vol.All(
|
||||
vol.Lower, vol.Any(ENTITY_MATCH_ALL, ENTITY_MATCH_ANY)
|
||||
@@ -1581,7 +1585,6 @@ def STATE_CONDITION_SCHEMA(value: Any) -> dict[str, Any]:
|
||||
TEMPLATE_CONDITION_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "template",
|
||||
vol.Required(CONF_VALUE_TEMPLATE): template,
|
||||
}
|
||||
)
|
||||
@@ -1590,7 +1593,6 @@ TIME_CONDITION_SCHEMA = vol.All(
|
||||
vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "time",
|
||||
vol.Optional("before"): vol.Any(
|
||||
time, vol.All(str, entity_domain(["input_datetime", "time", "sensor"]))
|
||||
),
|
||||
@@ -1606,7 +1608,6 @@ TIME_CONDITION_SCHEMA = vol.All(
|
||||
TRIGGER_CONDITION_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "trigger",
|
||||
vol.Required(CONF_ID): vol.All(ensure_list, [string]),
|
||||
}
|
||||
)
|
||||
@@ -1614,7 +1615,6 @@ TRIGGER_CONDITION_SCHEMA = vol.Schema(
|
||||
AND_CONDITION_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "and",
|
||||
vol.Required(CONF_CONDITIONS): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1625,7 +1625,7 @@ AND_CONDITION_SCHEMA = vol.Schema(
|
||||
|
||||
AND_CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
**_CONDITION_COMMON_SCHEMA,
|
||||
vol.Required("and"): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1637,7 +1637,6 @@ AND_CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
OR_CONDITION_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "or",
|
||||
vol.Required(CONF_CONDITIONS): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1648,7 +1647,7 @@ OR_CONDITION_SCHEMA = vol.Schema(
|
||||
|
||||
OR_CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
**_CONDITION_COMMON_SCHEMA,
|
||||
vol.Required("or"): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1660,7 +1659,6 @@ OR_CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
NOT_CONDITION_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "not",
|
||||
vol.Required(CONF_CONDITIONS): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1671,7 +1669,7 @@ NOT_CONDITION_SCHEMA = vol.Schema(
|
||||
|
||||
NOT_CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
**_CONDITION_COMMON_SCHEMA,
|
||||
vol.Required("not"): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1683,7 +1681,6 @@ NOT_CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
DEVICE_CONDITION_BASE_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): "device",
|
||||
vol.Required(CONF_DEVICE_ID): str,
|
||||
vol.Required(CONF_DOMAIN): str,
|
||||
vol.Remove("metadata"): dict,
|
||||
@@ -1739,7 +1736,7 @@ dynamic_template_condition = vol.All(
|
||||
|
||||
CONDITION_SHORTHAND_SCHEMA = vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
**_CONDITION_COMMON_SCHEMA,
|
||||
vol.Required(CONF_CONDITION): vol.All(
|
||||
ensure_list,
|
||||
# pylint: disable-next=unnecessary-lambda
|
||||
@@ -1766,7 +1763,7 @@ BUILT_IN_CONDITIONS: ValueSchemas = {
|
||||
def _base_condition_validator(value: Any) -> Any:
|
||||
vol.Schema(
|
||||
{
|
||||
**CONDITION_BASE_SCHEMA,
|
||||
**_CONDITION_COMMON_SCHEMA,
|
||||
CONF_CONDITION: vol.All(str, vol.NotIn(BUILT_IN_CONDITIONS)),
|
||||
},
|
||||
extra=vol.ALLOW_EXTRA,
|
||||
@@ -1795,7 +1792,7 @@ CONDITIONS_SCHEMA = vol.All(ensure_list, [CONDITION_SCHEMA])
|
||||
dynamic_template_condition_action = vol.All(
|
||||
# Wrap a shorthand template condition action in a template condition
|
||||
vol.Schema(
|
||||
{**CONDITION_BASE_SCHEMA, vol.Required(CONF_CONDITION): dynamic_template}
|
||||
{**_CONDITION_COMMON_SCHEMA, vol.Required(CONF_CONDITION): dynamic_template}
|
||||
),
|
||||
lambda config: {
|
||||
**config,
|
||||
|
||||
Reference in New Issue
Block a user