Add area selector, remove date selector (#43658)

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
pull/43666/head
Bram Kragten 2020-11-26 15:44:25 +01:00 committed by GitHub
parent 316a2750df
commit 4aa181416c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 20 deletions

View File

@ -24,7 +24,7 @@ def validate_selector(config: Any) -> Dict:
if selector_class is None:
raise vol.Invalid(f"Unknown selector type {selector_type} found")
# Seletors can be empty
# Selectors can be empty
if config[selector_type] is None:
return {selector_type: {}}
@ -67,10 +67,21 @@ class DeviceSelector(Selector):
vol.Optional("manufacturer"): str,
# Model of device
vol.Optional("model"): str,
# Device has to contain entities matching this selector
vol.Optional(
"entity"
): EntitySelector.CONFIG_SCHEMA, # pylint: disable=no-member
}
)
@SELECTORS.register("area")
class AreaSelector(Selector):
"""Selector of a single area."""
CONFIG_SCHEMA = vol.Schema({})
@SELECTORS.register("number")
class NumberSelector(Selector):
"""Selector of a numeric value."""
@ -95,13 +106,8 @@ class BooleanSelector(Selector):
CONFIG_SCHEMA = vol.Schema({})
@SELECTORS.register("datetime")
class DateTimeSelector(Selector):
"""Selector of a date and or time value."""
@SELECTORS.register("time")
class TimeSelector(Selector):
"""Selector of a time value."""
CONFIG_SCHEMA = vol.Schema(
{
vol.Optional("has_date", default=False): bool,
vol.Optional("has_time", default=False): bool,
}
)
CONFIG_SCHEMA = vol.Schema({})

View File

@ -47,6 +47,13 @@ def test_validate_selector():
{"model": "mock-model"},
{"manufacturer": "mock-manuf", "model": "mock-model"},
{"integration": "zha", "manufacturer": "mock-manuf", "model": "mock-model"},
{"entity": {"device_class": "motion"}},
{
"integration": "zha",
"manufacturer": "mock-manuf",
"model": "mock-model",
"entity": {"domain": "binary_sensor", "device_class": "motion"},
},
),
)
def test_device_selector_schema(schema):
@ -60,7 +67,9 @@ def test_device_selector_schema(schema):
{},
{"integration": "zha"},
{"domain": "light"},
{"device_class": "motion"},
{"integration": "zha", "domain": "light"},
{"integration": "zha", "domain": "binary_sensor", "device_class": "motion"},
),
)
def test_entity_selector_schema(schema):
@ -68,6 +77,15 @@ def test_entity_selector_schema(schema):
selector.validate_selector({"entity": schema})
@pytest.mark.parametrize(
"schema",
({},),
)
def test_area_selector_schema(schema):
"""Test area selector."""
selector.validate_selector({"area": schema})
@pytest.mark.parametrize(
"schema",
(
@ -94,14 +112,8 @@ def test_boolean_selector_schema(schema):
@pytest.mark.parametrize(
"schema",
(
{},
{"has_date": True, "has_time": True},
{"has_date": False, "has_time": False},
{"has_date": True, "has_time": False},
{"has_date": False, "has_time": True},
),
({},),
)
def test_datetime_selector_schema(schema):
"""Test datetime selector."""
selector.validate_selector({"datetime": schema})
def test_time_selector_schema(schema):
"""Test time selector."""
selector.validate_selector({"time": schema})