diff --git a/homeassistant/config.py b/homeassistant/config.py index bd956846886..b63acf4ab4c 100644 --- a/homeassistant/config.py +++ b/homeassistant/config.py @@ -574,7 +574,9 @@ def _identify_config_schema(module: ModuleType) -> Optional[str]: if hasattr(key, "default") and not isinstance( key.default, vol.schema_builder.Undefined ): - default_value = schema(key.default()) + default_value = module.CONFIG_SCHEMA({module.DOMAIN: key.default()})[ # type: ignore + module.DOMAIN # type: ignore + ] if isinstance(default_value, dict): return "dict" diff --git a/tests/test_config.py b/tests/test_config.py index ba0153e7a7d..f226c72f7ad 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -995,8 +995,20 @@ async def test_component_config_exceptions(hass, caplog): @pytest.mark.parametrize( "domain, schema, expected", [ - ("zone", vol.Schema({vol.Optional("zone", default=[]): list}), "list"), - ("zone", vol.Schema({vol.Optional("zone", default=dict): dict}), "dict"), + ("zone", vol.Schema({vol.Optional("zone", default=list): [int]}), "list"), + ("zone", vol.Schema({vol.Optional("zone", default=[]): [int]}), "list"), + ( + "zone", + vol.Schema({vol.Optional("zone", default={}): {vol.Optional("hello"): 1}}), + "dict", + ), + ( + "zone", + vol.Schema( + {vol.Optional("zone", default=dict): {vol.Optional("hello"): 1}} + ), + "dict", + ), ("zone", vol.Schema({vol.Optional("zone"): int}), None), ("zone", vol.Schema({"zone": int}), None), ("not_existing", vol.Schema({vol.Optional("zone", default=dict): dict}), None,),