diff --git a/homeassistant/components/alert.py b/homeassistant/components/alert.py index 759a2185047..3a18281e49b 100644 --- a/homeassistant/components/alert.py +++ b/homeassistant/components/alert.py @@ -46,9 +46,7 @@ ALERT_SCHEMA = vol.Schema({ vol.Required(CONF_NOTIFIERS): cv.ensure_list}) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: ALERT_SCHEMA, - }), + DOMAIN: cv.schema_with_slug_keys(ALERT_SCHEMA), }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/axis/__init__.py b/homeassistant/components/axis/__init__.py index 26fe41724f9..fd2e603445c 100644 --- a/homeassistant/components/axis/__init__.py +++ b/homeassistant/components/axis/__init__.py @@ -50,9 +50,7 @@ DEVICE_SCHEMA = vol.Schema({ }) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: DEVICE_SCHEMA, - }), + DOMAIN: cv.schema_with_slug_keys(DEVICE_SCHEMA), }, extra=vol.ALLOW_EXTRA) SERVICE_VAPIX_CALL = 'vapix_call' diff --git a/homeassistant/components/binary_sensor/template.py b/homeassistant/components/binary_sensor/template.py index d5f8b16e0c1..605ab24a264 100644 --- a/homeassistant/components/binary_sensor/template.py +++ b/homeassistant/components/binary_sensor/template.py @@ -41,7 +41,7 @@ SENSOR_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}), + vol.Required(CONF_SENSORS): cv.schema_with_slug_keys(SENSOR_SCHEMA), }) diff --git a/homeassistant/components/binary_sensor/trend.py b/homeassistant/components/binary_sensor/trend.py index 4773e88f5df..8f3ff5d798e 100644 --- a/homeassistant/components/binary_sensor/trend.py +++ b/homeassistant/components/binary_sensor/trend.py @@ -51,7 +51,7 @@ SENSOR_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}), + vol.Required(CONF_SENSORS): cv.schema_with_slug_keys(SENSOR_SCHEMA), }) diff --git a/homeassistant/components/counter/__init__.py b/homeassistant/components/counter/__init__.py index cd3a29df2b6..aeef2818f63 100644 --- a/homeassistant/components/counter/__init__.py +++ b/homeassistant/components/counter/__init__.py @@ -37,8 +37,8 @@ SERVICE_SCHEMA = vol.Schema({ }) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.Any({ + DOMAIN: cv.schema_with_slug_keys( + vol.Any({ vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_INITIAL, default=DEFAULT_INITIAL): cv.positive_int, @@ -46,7 +46,7 @@ CONFIG_SCHEMA = vol.Schema({ vol.Optional(CONF_RESTORE, default=True): cv.boolean, vol.Optional(CONF_STEP, default=DEFAULT_STEP): cv.positive_int, }, None) - }) + ) }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/cover/command_line.py b/homeassistant/components/cover/command_line.py index bebf78b1db6..4f4fca1b27a 100644 --- a/homeassistant/components/cover/command_line.py +++ b/homeassistant/components/cover/command_line.py @@ -27,7 +27,7 @@ COVER_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_COVERS): vol.Schema({cv.slug: COVER_SCHEMA}), + vol.Required(CONF_COVERS): cv.schema_with_slug_keys(COVER_SCHEMA), }) diff --git a/homeassistant/components/cover/garadget.py b/homeassistant/components/cover/garadget.py index 03756a971bc..28be3dc6b82 100644 --- a/homeassistant/components/cover/garadget.py +++ b/homeassistant/components/cover/garadget.py @@ -47,7 +47,7 @@ COVER_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_COVERS): vol.Schema({cv.slug: COVER_SCHEMA}), + vol.Required(CONF_COVERS): cv.schema_with_slug_keys(COVER_SCHEMA), }) diff --git a/homeassistant/components/cover/opengarage.py b/homeassistant/components/cover/opengarage.py index 19a87c5bf7c..664d2e291ac 100644 --- a/homeassistant/components/cover/opengarage.py +++ b/homeassistant/components/cover/opengarage.py @@ -46,7 +46,7 @@ COVER_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_COVERS): vol.Schema({cv.slug: COVER_SCHEMA}), + vol.Required(CONF_COVERS): cv.schema_with_slug_keys(COVER_SCHEMA), }) diff --git a/homeassistant/components/cover/scsgate.py b/homeassistant/components/cover/scsgate.py index a6f09c7237d..2d85c1fe3c3 100644 --- a/homeassistant/components/cover/scsgate.py +++ b/homeassistant/components/cover/scsgate.py @@ -18,7 +18,8 @@ _LOGGER = logging.getLogger(__name__) DEPENDENCIES = ['scsgate'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_DEVICES): vol.Schema({cv.slug: scsgate.SCSGATE_SCHEMA}), + vol.Required(CONF_DEVICES): + cv.schema_with_slug_keys(scsgate.SCSGATE_SCHEMA), }) diff --git a/homeassistant/components/cover/template.py b/homeassistant/components/cover/template.py index f64e4ae7a3f..1d3642a6036 100644 --- a/homeassistant/components/cover/template.py +++ b/homeassistant/components/cover/template.py @@ -67,7 +67,7 @@ COVER_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_COVERS): vol.Schema({cv.slug: COVER_SCHEMA}), + vol.Required(CONF_COVERS): cv.schema_with_slug_keys(COVER_SCHEMA), }) diff --git a/homeassistant/components/cover/velbus.py b/homeassistant/components/cover/velbus.py index a8501778884..7e5099cecf8 100644 --- a/homeassistant/components/cover/velbus.py +++ b/homeassistant/components/cover/velbus.py @@ -26,7 +26,7 @@ COVER_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_COVERS): vol.Schema({cv.slug: COVER_SCHEMA}), + vol.Required(CONF_COVERS): cv.schema_with_slug_keys(COVER_SCHEMA), }) DEPENDENCIES = ['velbus'] diff --git a/homeassistant/components/fan/template.py b/homeassistant/components/fan/template.py index a2f33d40e48..d9182b79a40 100644 --- a/homeassistant/components/fan/template.py +++ b/homeassistant/components/fan/template.py @@ -62,7 +62,7 @@ FAN_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ - vol.Required(CONF_FANS): vol.Schema({cv.slug: FAN_SCHEMA}), + vol.Required(CONF_FANS): cv.schema_with_slug_keys(FAN_SCHEMA), }) diff --git a/homeassistant/components/history_graph.py b/homeassistant/components/history_graph.py index fa7d615dce2..7d9db379705 100644 --- a/homeassistant/components/history_graph.py +++ b/homeassistant/components/history_graph.py @@ -34,7 +34,7 @@ GRAPH_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({cv.slug: GRAPH_SCHEMA}) + DOMAIN: cv.schema_with_slug_keys(GRAPH_SCHEMA) }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/input_boolean.py b/homeassistant/components/input_boolean.py index 541e38202fc..896de61130c 100644 --- a/homeassistant/components/input_boolean.py +++ b/homeassistant/components/input_boolean.py @@ -30,13 +30,13 @@ SERVICE_SCHEMA = vol.Schema({ }) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.Any({ + DOMAIN: cv.schema_with_slug_keys( + vol.Any({ vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_INITIAL): cv.boolean, vol.Optional(CONF_ICON): cv.icon, }, None) - }) + ) }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/input_datetime.py b/homeassistant/components/input_datetime.py index 6ac9a24d044..63dcc364c9c 100644 --- a/homeassistant/components/input_datetime.py +++ b/homeassistant/components/input_datetime.py @@ -46,14 +46,15 @@ def has_date_or_time(conf): CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.All({ + DOMAIN: cv.schema_with_slug_keys( + vol.All({ vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_HAS_DATE, default=False): cv.boolean, vol.Optional(CONF_HAS_TIME, default=False): cv.boolean, vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_INITIAL): cv.string, - }, has_date_or_time)}) + }, has_date_or_time) + ) }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/input_number.py b/homeassistant/components/input_number.py index b6c6eab3cf5..8cfa7abaf20 100644 --- a/homeassistant/components/input_number.py +++ b/homeassistant/components/input_number.py @@ -63,8 +63,8 @@ def _cv_input_number(cfg): CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.All({ + DOMAIN: cv.schema_with_slug_keys( + vol.All({ vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_MIN): vol.Coerce(float), vol.Required(CONF_MAX): vol.Coerce(float), @@ -76,7 +76,7 @@ CONFIG_SCHEMA = vol.Schema({ vol.Optional(CONF_MODE, default=MODE_SLIDER): vol.In([MODE_BOX, MODE_SLIDER]), }, _cv_input_number) - }) + ) }, required=True, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/input_select.py b/homeassistant/components/input_select.py index cc9a73bf915..fc858e75397 100644 --- a/homeassistant/components/input_select.py +++ b/homeassistant/components/input_select.py @@ -64,14 +64,15 @@ def _cv_input_select(cfg): CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.All({ + DOMAIN: cv.schema_with_slug_keys( + vol.All({ vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_OPTIONS): vol.All(cv.ensure_list, vol.Length(min=1), [cv.string]), vol.Optional(CONF_INITIAL): cv.string, vol.Optional(CONF_ICON): cv.icon, - }, _cv_input_select)}) + }, _cv_input_select) + ) }, required=True, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/input_text.py b/homeassistant/components/input_text.py index 8ac64b398f4..580337a3af3 100644 --- a/homeassistant/components/input_text.py +++ b/homeassistant/components/input_text.py @@ -55,8 +55,8 @@ def _cv_input_text(cfg): CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.All({ + DOMAIN: cv.schema_with_slug_keys( + vol.All({ vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_MIN, default=0): vol.Coerce(int), vol.Optional(CONF_MAX, default=100): vol.Coerce(int), @@ -67,7 +67,7 @@ CONFIG_SCHEMA = vol.Schema({ vol.Optional(CONF_MODE, default=MODE_TEXT): vol.In([MODE_TEXT, MODE_PASSWORD]), }, _cv_input_text) - }) + ) }, required=True, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/light/scsgate.py b/homeassistant/components/light/scsgate.py index 4a18bc99672..c218e194791 100644 --- a/homeassistant/components/light/scsgate.py +++ b/homeassistant/components/light/scsgate.py @@ -19,7 +19,8 @@ _LOGGER = logging.getLogger(__name__) DEPENDENCIES = ['scsgate'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_DEVICES): vol.Schema({cv.slug: scsgate.SCSGATE_SCHEMA}), + vol.Required(CONF_DEVICES): + cv.schema_with_slug_keys(scsgate.SCSGATE_SCHEMA), }) diff --git a/homeassistant/components/light/template.py b/homeassistant/components/light/template.py index 2447dabe3c7..bf930dd1b38 100644 --- a/homeassistant/components/light/template.py +++ b/homeassistant/components/light/template.py @@ -44,7 +44,7 @@ LIGHT_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_LIGHTS): vol.Schema({cv.slug: LIGHT_SCHEMA}), + vol.Required(CONF_LIGHTS): cv.schema_with_slug_keys(LIGHT_SCHEMA), }) diff --git a/homeassistant/components/media_player/universal.py b/homeassistant/components/media_player/universal.py index 47eaf599929..18b953a0372 100644 --- a/homeassistant/components/media_player/universal.py +++ b/homeassistant/components/media_player/universal.py @@ -47,8 +47,8 @@ CONF_SERVICE_DATA = 'service_data' OFF_STATES = [STATE_IDLE, STATE_OFF, STATE_UNAVAILABLE] -ATTRS_SCHEMA = vol.Schema({cv.slug: cv.string}) -CMD_SCHEMA = vol.Schema({cv.slug: cv.SERVICE_SCHEMA}) +ATTRS_SCHEMA = cv.schema_with_slug_keys(cv.string) +CMD_SCHEMA = cv.schema_with_slug_keys(cv.SERVICE_SCHEMA) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_NAME): cv.string, diff --git a/homeassistant/components/panel_iframe.py b/homeassistant/components/panel_iframe.py index 86594b74995..030fbbf9324 100644 --- a/homeassistant/components/panel_iframe.py +++ b/homeassistant/components/panel_iframe.py @@ -19,8 +19,8 @@ CONF_RELATIVE_URL_ERROR_MSG = "Invalid relative URL. Absolute path required." CONF_RELATIVE_URL_REGEX = r'\A/' CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: { + DOMAIN: cv.schema_with_slug_keys( + vol.Schema({ # pylint: disable=no-value-for-parameter vol.Optional(CONF_TITLE): cv.string, vol.Optional(CONF_ICON): cv.icon, @@ -29,7 +29,9 @@ CONFIG_SCHEMA = vol.Schema({ CONF_RELATIVE_URL_REGEX, msg=CONF_RELATIVE_URL_ERROR_MSG), vol.Url()), - }})}, extra=vol.ALLOW_EXTRA) + }) + ) +}, extra=vol.ALLOW_EXTRA) async def async_setup(hass, config): diff --git a/homeassistant/components/proximity.py b/homeassistant/components/proximity.py index 38b37cad51e..e8d86d480e5 100644 --- a/homeassistant/components/proximity.py +++ b/homeassistant/components/proximity.py @@ -49,9 +49,7 @@ ZONE_SCHEMA = vol.Schema({ }) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: ZONE_SCHEMA, - }), + DOMAIN: cv.schema_with_slug_keys(ZONE_SCHEMA), }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/remote/xiaomi_miio.py b/homeassistant/components/remote/xiaomi_miio.py index a247cb3e914..c8ffd043321 100644 --- a/homeassistant/components/remote/xiaomi_miio.py +++ b/homeassistant/components/remote/xiaomi_miio.py @@ -57,7 +57,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(ATTR_HIDDEN, default=True): cv.boolean, vol.Required(CONF_TOKEN): vol.All(str, vol.Length(min=32, max=32)), vol.Optional(CONF_COMMANDS, default={}): - vol.Schema({cv.slug: COMMAND_SCHEMA}), + cv.schema_with_slug_keys(COMMAND_SCHEMA), }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/rest_command.py b/homeassistant/components/rest_command.py index ce5873f41d4..c1ccc73b81c 100644 --- a/homeassistant/components/rest_command.py +++ b/homeassistant/components/rest_command.py @@ -49,9 +49,7 @@ COMMAND_SCHEMA = vol.Schema({ }) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: COMMAND_SCHEMA, - }), + DOMAIN: cv.schema_with_slug_keys(COMMAND_SCHEMA), }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/sensor/lacrosse.py b/homeassistant/components/sensor/lacrosse.py index a2dbaa8f324..32b1dac9250 100644 --- a/homeassistant/components/sensor/lacrosse.py +++ b/homeassistant/components/sensor/lacrosse.py @@ -45,7 +45,7 @@ SENSOR_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}), + vol.Required(CONF_SENSORS): cv.schema_with_slug_keys(SENSOR_SCHEMA), vol.Optional(CONF_BAUD, default=DEFAULT_BAUD): cv.string, vol.Optional(CONF_DATARATE): cv.positive_int, vol.Optional(CONF_DEVICE, default=DEFAULT_DEVICE): cv.string, diff --git a/homeassistant/components/sensor/sma.py b/homeassistant/components/sensor/sma.py index 4bfa62bf6dd..61009a472fb 100644 --- a/homeassistant/components/sensor/sma.py +++ b/homeassistant/components/sensor/sma.py @@ -68,9 +68,9 @@ PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend({ vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_GROUP, default=GROUPS[0]): vol.In(GROUPS), vol.Optional(CONF_SENSORS, default={}): - vol.Schema({cv.slug: cv.ensure_list}), + cv.schema_with_slug_keys(cv.ensure_list), vol.Optional(CONF_CUSTOM, default={}): - vol.Schema({cv.slug: CUSTOM_SCHEMA}), + cv.schema_with_slug_keys(CUSTOM_SCHEMA), }, extra=vol.PREVENT_EXTRA), _check_sensor_schema) diff --git a/homeassistant/components/sensor/template.py b/homeassistant/components/sensor/template.py index 3fa45935617..5f3af4a06a4 100644 --- a/homeassistant/components/sensor/template.py +++ b/homeassistant/components/sensor/template.py @@ -36,7 +36,7 @@ SENSOR_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}), + vol.Required(CONF_SENSORS): cv.schema_with_slug_keys(SENSOR_SCHEMA), }) diff --git a/homeassistant/components/shell_command.py b/homeassistant/components/shell_command.py index 2a95dd5c144..f9ec8da54e3 100644 --- a/homeassistant/components/shell_command.py +++ b/homeassistant/components/shell_command.py @@ -21,9 +21,7 @@ DOMAIN = 'shell_command' _LOGGER = logging.getLogger(__name__) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: cv.string, - }), + DOMAIN: cv.schema_with_slug_keys(cv.string), }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/switch/broadlink.py b/homeassistant/components/switch/broadlink.py index 685402611a0..9c17767f033 100644 --- a/homeassistant/components/switch/broadlink.py +++ b/homeassistant/components/switch/broadlink.py @@ -59,7 +59,7 @@ MP1_SWITCH_SLOT_SCHEMA = vol.Schema({ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_SWITCHES, default={}): - vol.Schema({cv.slug: SWITCH_SCHEMA}), + cv.schema_with_slug_keys(SWITCH_SCHEMA), vol.Optional(CONF_SLOTS, default={}): MP1_SWITCH_SLOT_SCHEMA, vol.Required(CONF_HOST): cv.string, vol.Required(CONF_MAC): cv.string, diff --git a/homeassistant/components/switch/command_line.py b/homeassistant/components/switch/command_line.py index d25c5708316..4edbd79ee0c 100644 --- a/homeassistant/components/switch/command_line.py +++ b/homeassistant/components/switch/command_line.py @@ -28,7 +28,7 @@ SWITCH_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SWITCHES): vol.Schema({cv.slug: SWITCH_SCHEMA}), + vol.Required(CONF_SWITCHES): cv.schema_with_slug_keys(SWITCH_SCHEMA), }) diff --git a/homeassistant/components/switch/kankun.py b/homeassistant/components/switch/kankun.py index 59966739b91..86e7fcdab3e 100644 --- a/homeassistant/components/switch/kankun.py +++ b/homeassistant/components/switch/kankun.py @@ -30,7 +30,7 @@ SWITCH_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SWITCHES): vol.Schema({cv.slug: SWITCH_SCHEMA}), + vol.Required(CONF_SWITCHES): cv.schema_with_slug_keys(SWITCH_SCHEMA), }) diff --git a/homeassistant/components/switch/scsgate.py b/homeassistant/components/switch/scsgate.py index bb8c067ebd9..9344aeab7ed 100644 --- a/homeassistant/components/switch/scsgate.py +++ b/homeassistant/components/switch/scsgate.py @@ -24,7 +24,8 @@ CONF_SCENARIO = 'scenario' CONF_SCS_ID = 'scs_id' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_DEVICES): vol.Schema({cv.slug: scsgate.SCSGATE_SCHEMA}), + vol.Required(CONF_DEVICES): + cv.schema_with_slug_keys(scsgate.SCSGATE_SCHEMA), }) diff --git a/homeassistant/components/switch/telnet.py b/homeassistant/components/switch/telnet.py index 440279a70a8..7c3baf2981a 100644 --- a/homeassistant/components/switch/telnet.py +++ b/homeassistant/components/switch/telnet.py @@ -32,7 +32,7 @@ SWITCH_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SWITCHES): vol.Schema({cv.slug: SWITCH_SCHEMA}), + vol.Required(CONF_SWITCHES): cv.schema_with_slug_keys(SWITCH_SCHEMA), }) SCAN_INTERVAL = timedelta(seconds=10) diff --git a/homeassistant/components/switch/template.py b/homeassistant/components/switch/template.py index 51cea68f6b3..a2098c2f5fd 100644 --- a/homeassistant/components/switch/template.py +++ b/homeassistant/components/switch/template.py @@ -38,7 +38,7 @@ SWITCH_SCHEMA = vol.Schema({ }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_SWITCHES): vol.Schema({cv.slug: SWITCH_SCHEMA}), + vol.Required(CONF_SWITCHES): cv.schema_with_slug_keys(SWITCH_SCHEMA), }) diff --git a/homeassistant/components/timer/__init__.py b/homeassistant/components/timer/__init__.py index 364975671c4..b898c577bb2 100644 --- a/homeassistant/components/timer/__init__.py +++ b/homeassistant/components/timer/__init__.py @@ -53,14 +53,14 @@ SERVICE_SCHEMA_DURATION = vol.Schema({ }) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - cv.slug: vol.Any({ + DOMAIN: cv.schema_with_slug_keys( + vol.Any({ vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_DURATION, timedelta(DEFAULT_DURATION)): cv.time_period, }, None) - }) + ) }, extra=vol.ALLOW_EXTRA) diff --git a/homeassistant/components/volvooncall.py b/homeassistant/components/volvooncall.py index 9f9b58ec8b6..ce4dccbaf75 100644 --- a/homeassistant/components/volvooncall.py +++ b/homeassistant/components/volvooncall.py @@ -93,8 +93,8 @@ CONFIG_SCHEMA = vol.Schema({ vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_UPDATE_INTERVAL, default=DEFAULT_UPDATE_INTERVAL): ( vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL))), - vol.Optional(CONF_NAME, default={}): vol.Schema( - {cv.slug: cv.string}), + vol.Optional(CONF_NAME, default={}): + cv.schema_with_slug_keys(cv.string), vol.Optional(CONF_RESOURCES): vol.All( cv.ensure_list, [vol.In(RESOURCES)]), vol.Optional(CONF_REGION): cv.string, diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index ef0166bc16d..475135b4cce 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -329,6 +329,9 @@ def schema_with_slug_keys(value_schema: Union[T, Callable]) -> Callable: def verify(value: Dict) -> Dict: """Validate all keys are slugs and then the value_schema.""" + if not isinstance(value, dict): + raise vol.Invalid('expected dictionary') + for key in value.keys(): slug(key) return schema(value)