From d7145095ef6d7de153289f00e7c13e8a77fe9d55 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 18 Mar 2022 10:26:05 +0100 Subject: [PATCH] Tweak selectors (#68267) * Optionally don't convert output of duration and time selectors * Allow number selector selection to be None * Never convert output of duration and time selectors * Revert "Allow number selector selection to be None" This reverts commit b6f52c1e83dc287a30c8ef4c2e417dc20b26a1d6. --- homeassistant/helpers/selector.py | 12 ++++++------ tests/helpers/test_selector.py | 15 ++------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index 3359deb9b09..6668229c0cf 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -2,7 +2,6 @@ from __future__ import annotations from collections.abc import Callable -from datetime import time as time_sys, timedelta from typing import Any, cast import voluptuous as vol @@ -261,9 +260,10 @@ class TimeSelector(Selector): CONFIG_SCHEMA = vol.Schema({}) - def __call__(self, data: Any) -> time_sys: + def __call__(self, data: Any) -> str: """Validate the passed selection.""" - return cv.time(data) + cv.time(data) + return cast(str, data) @SELECTORS.register("target") @@ -409,10 +409,10 @@ class DurationSelector(Selector): CONFIG_SCHEMA = vol.Schema({}) - def __call__(self, data: Any) -> timedelta: + def __call__(self, data: Any) -> dict[str, float]: """Validate the passed selection.""" - duration: timedelta = cv.time_period_dict(data) - return duration + cv.time_period_dict(data) + return cast(dict[str, float], data) @SELECTORS.register("icon") diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index 7031f16d249..e9e70f15fad 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -1,11 +1,8 @@ """Test selectors.""" -from datetime import timedelta - import pytest import voluptuous as vol from homeassistant.helpers import config_validation as cv, selector -from homeassistant.util import dt as dt_util FAKE_UUID = "a266a680b608c32770e6c45bfe6b8411" @@ -253,9 +250,7 @@ def test_boolean_selector_schema(schema, valid_selections, invalid_selections): ) def test_time_selector_schema(schema, valid_selections, invalid_selections): """Test time selector.""" - _test_selector( - "time", schema, valid_selections, invalid_selections, dt_util.parse_time - ) + _test_selector("time", schema, valid_selections, invalid_selections) @pytest.mark.parametrize( @@ -393,13 +388,7 @@ def test_attribute_selector_schema(schema, valid_selections, invalid_selections) ) def test_duration_selector_schema(schema, valid_selections, invalid_selections): """Test duration selector.""" - _test_selector( - "duration", - schema, - valid_selections, - invalid_selections, - lambda x: timedelta(**x), - ) + _test_selector("duration", schema, valid_selections, invalid_selections) @pytest.mark.parametrize(