mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Make cv.empty_config_schema log an error instead of raise (#93646)
* Make cv.empty_config_schema log an error instead of raise * Add test * Update homeassistant/helpers/config_validation.py Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
This commit is contained in:
parent
7ff1c79514
commit
49c3a8886f
@ -1045,9 +1045,33 @@ def expand_condition_shorthand(value: Any | None) -> Any:
|
|||||||
|
|
||||||
|
|
||||||
# Schemas
|
# Schemas
|
||||||
def empty_config_schema(domain: str) -> vol.Schema:
|
def empty_config_schema(domain: str) -> Callable[[dict], dict]:
|
||||||
"""Return a config schema which accepts no configuration parameters."""
|
"""Return a config schema which logs if there are configuration parameters."""
|
||||||
return vol.Schema({vol.Optional(domain): vol.Schema({})}, extra=vol.ALLOW_EXTRA)
|
|
||||||
|
module = inspect.getmodule(inspect.stack(context=0)[2].frame)
|
||||||
|
if module is not None:
|
||||||
|
module_name = module.__name__
|
||||||
|
else:
|
||||||
|
# If Python is unable to access the sources files, the call stack frame
|
||||||
|
# will be missing information, so let's guard.
|
||||||
|
# https://github.com/home-assistant/core/issues/24982
|
||||||
|
module_name = __name__
|
||||||
|
logger_func = logging.getLogger(module_name).error
|
||||||
|
|
||||||
|
def validator(config: dict) -> dict:
|
||||||
|
if domain in config and config[domain]:
|
||||||
|
logger_func(
|
||||||
|
(
|
||||||
|
"The %s integration does not support any configuration parameters, "
|
||||||
|
"got %s. Please remove the configuration parameters from your "
|
||||||
|
"configuration."
|
||||||
|
),
|
||||||
|
domain,
|
||||||
|
config[domain],
|
||||||
|
)
|
||||||
|
return config
|
||||||
|
|
||||||
|
return validator
|
||||||
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = vol.Schema(
|
PLATFORM_SCHEMA = vol.Schema(
|
||||||
|
@ -1468,3 +1468,25 @@ def test_positive_time_period_template() -> None:
|
|||||||
schema("{{ 'invalid' }}")
|
schema("{{ 'invalid' }}")
|
||||||
schema({"{{ 'invalid' }}": 5})
|
schema({"{{ 'invalid' }}": 5})
|
||||||
schema({"minutes": "{{ 'invalid' }}"})
|
schema({"minutes": "{{ 'invalid' }}"})
|
||||||
|
|
||||||
|
|
||||||
|
def test_empty_schema(caplog: pytest.LogCaptureFixture) -> None:
|
||||||
|
"""Test if the current module cannot be inspected."""
|
||||||
|
expected_message = (
|
||||||
|
"The test_domain integration does not support any configuration parameters"
|
||||||
|
)
|
||||||
|
|
||||||
|
cv.empty_config_schema("test_domain")({})
|
||||||
|
assert expected_message not in caplog.text
|
||||||
|
|
||||||
|
cv.empty_config_schema("test_domain")({"test_domain": {}})
|
||||||
|
assert expected_message not in caplog.text
|
||||||
|
|
||||||
|
cv.empty_config_schema("test_domain")({"test_domain": {"foo": "bar"}})
|
||||||
|
assert expected_message in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
def test_empty_schema_cant_find_module() -> None:
|
||||||
|
"""Test if the current module cannot be inspected."""
|
||||||
|
with patch("inspect.getmodule", return_value=None):
|
||||||
|
cv.empty_config_schema("test_domain")({"test_domain": {"foo": "bar"}})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user