Add base schema for triggers (#51727)

* Add base schema for triggers

* Tweak

* Make TRIGGER_BASE_SCHEMA a voluptuous schema

* Make state trigger BASE_SCHEMA a voluptuous schema
This commit is contained in:
Erik Montnemery 2021-06-11 09:51:12 +02:00 committed by GitHub
parent 9e378d51af
commit 49bec86dae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 33 additions and 27 deletions

View file

@ -25,7 +25,7 @@ from .exceptions import DeviceNotFound, InvalidDeviceAutomationConfig
DOMAIN = "device_automation" DOMAIN = "device_automation"
DEVICE_TRIGGER_BASE_SCHEMA = vol.Schema( DEVICE_TRIGGER_BASE_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "device", vol.Required(CONF_PLATFORM): "device",
vol.Required(CONF_DOMAIN): str, vol.Required(CONF_DOMAIN): str,

View file

@ -18,7 +18,7 @@ EVENT_ENTER = "enter"
EVENT_LEAVE = "leave" EVENT_LEAVE = "leave"
DEFAULT_EVENT = EVENT_ENTER DEFAULT_EVENT = EVENT_ENTER
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "geo_location", vol.Required(CONF_PLATFORM): "geo_location",
vol.Required(CONF_SOURCE): cv.string, vol.Required(CONF_SOURCE): cv.string,

View file

@ -10,7 +10,7 @@ from homeassistant.helpers import config_validation as cv, template
CONF_EVENT_TYPE = "event_type" CONF_EVENT_TYPE = "event_type"
CONF_EVENT_CONTEXT = "context" CONF_EVENT_CONTEXT = "context"
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "event", vol.Required(CONF_PLATFORM): "event",
vol.Required(CONF_EVENT_TYPE): vol.All(cv.ensure_list, [cv.template]), vol.Required(CONF_EVENT_TYPE): vol.All(cv.ensure_list, [cv.template]),

View file

@ -3,13 +3,14 @@ import voluptuous as vol
from homeassistant.const import CONF_EVENT, CONF_PLATFORM, EVENT_HOMEASSISTANT_STOP from homeassistant.const import CONF_EVENT, CONF_PLATFORM, EVENT_HOMEASSISTANT_STOP
from homeassistant.core import HassJob, callback from homeassistant.core import HassJob, callback
from homeassistant.helpers import config_validation as cv
# mypy: allow-untyped-defs # mypy: allow-untyped-defs
EVENT_START = "start" EVENT_START = "start"
EVENT_SHUTDOWN = "shutdown" EVENT_SHUTDOWN = "shutdown"
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "homeassistant", vol.Required(CONF_PLATFORM): "homeassistant",
vol.Required(CONF_EVENT): vol.Any(EVENT_START, EVENT_SHUTDOWN), vol.Required(CONF_EVENT): vol.Any(EVENT_START, EVENT_SHUTDOWN),

View file

@ -44,7 +44,7 @@ def validate_above_below(value):
TRIGGER_SCHEMA = vol.All( TRIGGER_SCHEMA = vol.All(
vol.Schema( cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "numeric_state", vol.Required(CONF_PLATFORM): "numeric_state",
vol.Required(CONF_ENTITY_ID): cv.entity_ids, vol.Required(CONF_ENTITY_ID): cv.entity_ids,

View file

@ -27,25 +27,25 @@ CONF_ENTITY_ID = "entity_id"
CONF_FROM = "from" CONF_FROM = "from"
CONF_TO = "to" CONF_TO = "to"
BASE_SCHEMA = { BASE_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
vol.Required(CONF_PLATFORM): "state", {
vol.Required(CONF_ENTITY_ID): cv.entity_ids, vol.Required(CONF_PLATFORM): "state",
vol.Optional(CONF_FOR): cv.positive_time_period_template, vol.Required(CONF_ENTITY_ID): cv.entity_ids,
vol.Optional(CONF_ATTRIBUTE): cv.match_all, vol.Optional(CONF_FOR): cv.positive_time_period_template,
} vol.Optional(CONF_ATTRIBUTE): cv.match_all,
}
TRIGGER_STATE_SCHEMA = vol.Schema( )
TRIGGER_STATE_SCHEMA = BASE_SCHEMA.extend(
{ {
**BASE_SCHEMA,
# These are str on purpose. Want to catch YAML conversions # These are str on purpose. Want to catch YAML conversions
vol.Optional(CONF_FROM): vol.Any(str, [str]), vol.Optional(CONF_FROM): vol.Any(str, [str]),
vol.Optional(CONF_TO): vol.Any(str, [str]), vol.Optional(CONF_TO): vol.Any(str, [str]),
} }
) )
TRIGGER_ATTRIBUTE_SCHEMA = vol.Schema( TRIGGER_ATTRIBUTE_SCHEMA = BASE_SCHEMA.extend(
{ {
**BASE_SCHEMA,
vol.Optional(CONF_FROM): cv.match_all, vol.Optional(CONF_FROM): cv.match_all,
vol.Optional(CONF_TO): cv.match_all, vol.Optional(CONF_TO): cv.match_all,
} }

View file

@ -29,7 +29,7 @@ _TIME_TRIGGER_SCHEMA = vol.Any(
msg="Expected HH:MM, HH:MM:SS or Entity ID with domain 'input_datetime' or 'sensor'", msg="Expected HH:MM, HH:MM:SS or Entity ID with domain 'input_datetime' or 'sensor'",
) )
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "time", vol.Required(CONF_PLATFORM): "time",
vol.Required(CONF_AT): vol.All(cv.ensure_list, [_TIME_TRIGGER_SCHEMA]), vol.Required(CONF_AT): vol.All(cv.ensure_list, [_TIME_TRIGGER_SCHEMA]),

View file

@ -43,7 +43,7 @@ class TimePattern:
TRIGGER_SCHEMA = vol.All( TRIGGER_SCHEMA = vol.All(
vol.Schema( cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "time_pattern", vol.Required(CONF_PLATFORM): "time_pattern",
CONF_HOURS: TimePattern(maximum=23), CONF_HOURS: TimePattern(maximum=23),

View file

@ -15,7 +15,7 @@ CONF_NUMBER = "number"
CONF_HELD_MORE_THAN = "held_more_than" CONF_HELD_MORE_THAN = "held_more_than"
CONF_HELD_LESS_THAN = "held_less_than" CONF_HELD_LESS_THAN = "held_less_than"
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "litejet", vol.Required(CONF_PLATFORM): "litejet",
vol.Required(CONF_NUMBER): cv.positive_int, vol.Required(CONF_NUMBER): cv.positive_int,

View file

@ -19,7 +19,7 @@ CONF_TOPIC = "topic"
DEFAULT_ENCODING = "utf-8" DEFAULT_ENCODING = "utf-8"
DEFAULT_QOS = 0 DEFAULT_QOS = 0
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): mqtt.DOMAIN, vol.Required(CONF_PLATFORM): mqtt.DOMAIN,
vol.Required(CONF_TOPIC): mqtt.util.valid_subscribe_topic_template, vol.Required(CONF_TOPIC): mqtt.util.valid_subscribe_topic_template,

View file

@ -15,7 +15,7 @@ from homeassistant.helpers.event import async_track_sunrise, async_track_sunset
# mypy: allow-untyped-defs, no-check-untyped-defs # mypy: allow-untyped-defs, no-check-untyped-defs
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "sun", vol.Required(CONF_PLATFORM): "sun",
vol.Required(CONF_EVENT): cv.sun_event, vol.Required(CONF_EVENT): cv.sun_event,

View file

@ -7,7 +7,7 @@ from homeassistant.helpers import config_validation as cv
from .const import DEVICE_ID, DOMAIN, EVENT_TAG_SCANNED, TAG_ID from .const import DEVICE_ID, DOMAIN, EVENT_TAG_SCANNED, TAG_ID
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): DOMAIN, vol.Required(CONF_PLATFORM): DOMAIN,
vol.Required(TAG_ID): vol.All(cv.ensure_list, [cv.string]), vol.Required(TAG_ID): vol.All(cv.ensure_list, [cv.string]),

View file

@ -18,7 +18,7 @@ from homeassistant.helpers.template import result_as_boolean
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
TRIGGER_SCHEMA = IF_ACTION_SCHEMA = vol.Schema( TRIGGER_SCHEMA = IF_ACTION_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "template", vol.Required(CONF_PLATFORM): "template",
vol.Required(CONF_VALUE_TEMPLATE): cv.template, vol.Required(CONF_VALUE_TEMPLATE): cv.template,

View file

@ -12,8 +12,11 @@ import homeassistant.helpers.config_validation as cv
DEPENDENCIES = ("webhook",) DEPENDENCIES = ("webhook",)
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{vol.Required(CONF_PLATFORM): "webhook", vol.Required(CONF_WEBHOOK_ID): cv.string} {
vol.Required(CONF_PLATFORM): "webhook",
vol.Required(CONF_WEBHOOK_ID): cv.string,
}
) )

View file

@ -21,7 +21,7 @@ DEFAULT_EVENT = EVENT_ENTER
_EVENT_DESCRIPTION = {EVENT_ENTER: "entering", EVENT_LEAVE: "leaving"} _EVENT_DESCRIPTION = {EVENT_ENTER: "entering", EVENT_LEAVE: "leaving"}
TRIGGER_SCHEMA = vol.Schema( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {
vol.Required(CONF_PLATFORM): "zone", vol.Required(CONF_PLATFORM): "zone",
vol.Required(CONF_ENTITY_ID): cv.entity_ids, vol.Required(CONF_ENTITY_ID): cv.entity_ids,

View file

@ -1106,8 +1106,10 @@ CONDITION_SCHEMA: vol.Schema = vol.Schema(
) )
) )
TRIGGER_BASE_SCHEMA = vol.Schema({vol.Required(CONF_PLATFORM): str})
TRIGGER_SCHEMA = vol.All( TRIGGER_SCHEMA = vol.All(
ensure_list, [vol.Schema({vol.Required(CONF_PLATFORM): str}, extra=vol.ALLOW_EXTRA)] ensure_list, [TRIGGER_BASE_SCHEMA.extend({}, extra=vol.ALLOW_EXTRA)]
) )
_SCRIPT_DELAY_SCHEMA = vol.Schema( _SCRIPT_DELAY_SCHEMA = vol.Schema(