From 40485a6e893a6ebb460b41a69b6484693d438b4c Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Sat, 10 Mar 2018 20:02:04 +0200 Subject: [PATCH] Ensure we have valid config AFTER merging packages #13015 (#13038) * Ensure we have valid config AFTER merging packages #13015 * also fix packages --- homeassistant/bootstrap.py | 10 ++++++---- homeassistant/config.py | 3 +++ homeassistant/scripts/check_config.py | 5 +++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index 50d8502bbd1..34eab679581 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -113,15 +113,17 @@ def async_from_config_dict(config: Dict[str, Any], yield from hass.async_add_job(loader.prepare, hass) # Make a copy because we are mutating it. - new_config = OrderedDict() - for key, value in config.items(): - new_config[key] = value or {} - config = new_config + config = OrderedDict(config) # Merge packages conf_util.merge_packages_config( config, core_config.get(conf_util.CONF_PACKAGES, {})) + # Ensure we have no None values after merge + for key, value in config.items(): + if not value: + config[key] = {} + hass.config_entries = config_entries.ConfigEntries(hass, config) yield from hass.config_entries.async_load() diff --git a/homeassistant/config.py b/homeassistant/config.py index 5f2c6cf1625..e94fc297f48 100644 --- a/homeassistant/config.py +++ b/homeassistant/config.py @@ -562,6 +562,9 @@ def merge_packages_config(config, packages, _log_pkg_error=_log_pkg_error): continue if merge_type == 'dict': + if comp_conf is None: + comp_conf = OrderedDict() + if not isinstance(comp_conf, dict): _log_pkg_error( pack_name, comp_name, config, diff --git a/homeassistant/scripts/check_config.py b/homeassistant/scripts/check_config.py index 4e80b3c6536..641693501ff 100644 --- a/homeassistant/scripts/check_config.py +++ b/homeassistant/scripts/check_config.py @@ -326,6 +326,11 @@ def check_ha_config_file(config_dir): config, core_config.get(CONF_PACKAGES, {}), _pack_error) del core_config[CONF_PACKAGES] + # Ensure we have no None values after merge + for key, value in config.items(): + if not value: + config[key] = {} + # Filter out repeating config sections components = set(key.split(' ')[0] for key in config.keys())