Remove ordered_dict validator (#7375)
* Remove ordered_dict validator * Lint * Update test_config_validation.py
This commit is contained in:
parent
1f4f2d7086
commit
9afbbbf3fe
7 changed files with 8 additions and 90 deletions
|
@ -64,7 +64,7 @@ GROUP_SCHEMA = vol.Schema({
|
|||
})
|
||||
|
||||
CONFIG_SCHEMA = vol.Schema({
|
||||
DOMAIN: cv.ordered_dict(vol.All(_conf_preprocess, GROUP_SCHEMA))
|
||||
DOMAIN: vol.Schema({cv.match_all: vol.All(_conf_preprocess, GROUP_SCHEMA)})
|
||||
}, extra=vol.ALLOW_EXTRA)
|
||||
|
||||
# List of ON/OFF state tuples for groupable states
|
||||
|
|
|
@ -22,7 +22,7 @@ CONF_SOURCES = 'sources'
|
|||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Required(CONF_HOST): cv.string,
|
||||
vol.Optional(CONF_SOURCES): cv.ordered_dict(cv.string, cv.string),
|
||||
vol.Optional(CONF_SOURCES): vol.Schema({cv.string: cv.string}),
|
||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||
})
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ DEPENDENCIES = ['http']
|
|||
DOMAIN = 'rss_feed_template'
|
||||
|
||||
CONFIG_SCHEMA = vol.Schema({
|
||||
DOMAIN: cv.ordered_dict(
|
||||
vol.Schema({
|
||||
DOMAIN: vol.Schema({
|
||||
cv.match_all: vol.Schema({
|
||||
vol.Optional('requires_api_password', default=True): cv.boolean,
|
||||
vol.Optional('title'): cv.template,
|
||||
vol.Required('items'): vol.All(
|
||||
|
@ -32,7 +32,7 @@ CONFIG_SCHEMA = vol.Schema({
|
|||
}]
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
}, extra=vol.ALLOW_EXTRA)
|
||||
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ CONFIG_SCHEMA = vol.Schema({
|
|||
vol.Optional(CONF_DEVICE_CONFIG, default={}):
|
||||
vol.Schema({cv.entity_id: DEVICE_CONFIG_SCHEMA_ENTRY}),
|
||||
vol.Optional(CONF_DEVICE_CONFIG_GLOB, default={}):
|
||||
cv.ordered_dict(DEVICE_CONFIG_SCHEMA_ENTRY, cv.string),
|
||||
vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}),
|
||||
vol.Optional(CONF_DEVICE_CONFIG_DOMAIN, default={}):
|
||||
vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}),
|
||||
vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean,
|
||||
|
|
|
@ -112,7 +112,7 @@ CUSTOMIZE_CONFIG_SCHEMA = vol.Schema({
|
|||
vol.Optional(CONF_CUSTOMIZE_DOMAIN, default={}):
|
||||
vol.Schema({cv.string: dict}),
|
||||
vol.Optional(CONF_CUSTOMIZE_GLOB, default={}):
|
||||
cv.ordered_dict(OrderedDict, cv.string),
|
||||
vol.Schema({cv.string: OrderedDict}),
|
||||
})
|
||||
|
||||
CORE_CONFIG_SCHEMA = CUSTOMIZE_CONFIG_SCHEMA.extend({
|
||||
|
@ -454,7 +454,7 @@ def _identify_config_schema(module):
|
|||
except (AttributeError, KeyError):
|
||||
return (None, None)
|
||||
t_schema = str(schema)
|
||||
if t_schema.startswith(('{', '<function ordered_dict')):
|
||||
if t_schema.startswith('{'):
|
||||
return ('dict', schema)
|
||||
if t_schema.startswith(('[', 'All(<function ensure_list')):
|
||||
return ('list', schema)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
"""Helpers for config validation using voluptuous."""
|
||||
from collections import OrderedDict
|
||||
from datetime import timedelta, datetime as datetime_sys
|
||||
import os
|
||||
import re
|
||||
|
@ -373,29 +372,6 @@ def x10_address(value):
|
|||
return str(value).lower()
|
||||
|
||||
|
||||
def ordered_dict(value_validator, key_validator=match_all):
|
||||
"""Validate an ordered dict validator that maintains ordering.
|
||||
|
||||
value_validator will be applied to each value of the dictionary.
|
||||
key_validator (optional) will be applied to each key of the dictionary.
|
||||
"""
|
||||
item_validator = vol.Schema({key_validator: value_validator})
|
||||
|
||||
def validator(value):
|
||||
"""Validate ordered dict."""
|
||||
config = OrderedDict()
|
||||
|
||||
if not isinstance(value, dict):
|
||||
raise vol.Invalid('Value {} is not a dictionary'.format(value))
|
||||
for key, val in value.items():
|
||||
v_res = item_validator({key: val})
|
||||
config.update(v_res)
|
||||
|
||||
return config
|
||||
|
||||
return validator
|
||||
|
||||
|
||||
def ensure_list_csv(value: Any) -> Sequence:
|
||||
"""Ensure that input is a list or make one from comma-separated string."""
|
||||
if isinstance(value, str):
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
"""Test config validators."""
|
||||
from collections import OrderedDict
|
||||
from datetime import timedelta, datetime, date
|
||||
import enum
|
||||
import os
|
||||
|
@ -448,63 +447,6 @@ def test_has_at_least_one_key():
|
|||
schema(value)
|
||||
|
||||
|
||||
def test_ordered_dict_only_dict():
|
||||
"""Test ordered_dict validator."""
|
||||
schema = vol.Schema(cv.ordered_dict(cv.match_all, cv.match_all))
|
||||
|
||||
for value in (None, [], 100, 'hello'):
|
||||
with pytest.raises(vol.MultipleInvalid):
|
||||
schema(value)
|
||||
|
||||
|
||||
def test_ordered_dict_order():
|
||||
"""Test ordered_dict validator."""
|
||||
schema = vol.Schema(cv.ordered_dict(int, cv.string))
|
||||
|
||||
val = OrderedDict()
|
||||
val['first'] = 1
|
||||
val['second'] = 2
|
||||
|
||||
validated = schema(val)
|
||||
|
||||
assert isinstance(validated, OrderedDict)
|
||||
assert ['first', 'second'] == list(validated.keys())
|
||||
|
||||
|
||||
def test_ordered_dict_key_validator():
|
||||
"""Test ordered_dict key validator."""
|
||||
schema = vol.Schema(cv.ordered_dict(cv.match_all, cv.string))
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
schema({None: 1})
|
||||
|
||||
schema({'hello': 'world'})
|
||||
|
||||
schema = vol.Schema(cv.ordered_dict(cv.match_all, int))
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
schema({'hello': 1})
|
||||
|
||||
schema({1: 'works'})
|
||||
|
||||
|
||||
def test_ordered_dict_value_validator(): # pylint: disable=invalid-name
|
||||
"""Test ordered_dict validator."""
|
||||
schema = vol.Schema(cv.ordered_dict(cv.string))
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
schema({'hello': None})
|
||||
|
||||
schema({'hello': 'world'})
|
||||
|
||||
schema = vol.Schema(cv.ordered_dict(int))
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
schema({'hello': 'world'})
|
||||
|
||||
schema({'hello': 5})
|
||||
|
||||
|
||||
def test_enum():
|
||||
"""Test enum validator."""
|
||||
class TestEnum(enum.Enum):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue