diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index c62fe9e7d6b..464355d6fd5 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -11,12 +11,12 @@ from types import ModuleType from typing import Any, Optional, Dict import voluptuous as vol +from voluptuous.humanize import humanize_error import homeassistant.components as core_components from homeassistant.components import group, persistent_notification import homeassistant.config as conf_util import homeassistant.core as core -import homeassistant.helpers.config_validation as cv import homeassistant.loader as loader import homeassistant.util.package as pkg_util from homeassistant.const import EVENT_COMPONENT_LOADED, PLATFORM_FORMAT @@ -103,7 +103,7 @@ def _setup_component(hass: core.HomeAssistant, domain: str, config) -> bool: try: config = component.CONFIG_SCHEMA(config) except vol.MultipleInvalid as ex: - cv.log_exception(_LOGGER, ex, domain, config) + _log_exception(ex, domain, config) return False elif hasattr(component, 'PLATFORM_SCHEMA'): @@ -113,7 +113,7 @@ def _setup_component(hass: core.HomeAssistant, domain: str, config) -> bool: try: p_validated = component.PLATFORM_SCHEMA(p_config) except vol.MultipleInvalid as ex: - cv.log_exception(_LOGGER, ex, domain, p_config) + _log_exception(ex, domain, p_config) return False # Not all platform components follow same pattern for platforms @@ -134,8 +134,8 @@ def _setup_component(hass: core.HomeAssistant, domain: str, config) -> bool: try: p_validated = platform.PLATFORM_SCHEMA(p_validated) except vol.MultipleInvalid as ex: - cv.log_exception(_LOGGER, ex, '{}.{}' - .format(domain, p_name), p_validated) + _log_exception(ex, '{}.{}'.format(domain, p_name), + p_validated) return False platforms.append(p_validated) @@ -239,7 +239,7 @@ def from_config_dict(config: Dict[str, Any], try: conf_util.process_ha_core_config(hass, core_config) except vol.Invalid as ex: - cv.log_exception(_LOGGER, ex, 'homeassistant', core_config) + _log_exception(ex, 'homeassistant', core_config) return None conf_util.process_ha_config_upgrade(hass) @@ -374,3 +374,20 @@ def _ensure_loader_prepared(hass: core.HomeAssistant) -> None: def _mount_local_lib_path(config_dir: str) -> None: """Add local library to Python Path.""" sys.path.insert(0, os.path.join(config_dir, 'deps')) + + +def _log_exception(ex, domain, config): + """Generate log exception for config validation.""" + message = 'Invalid config for [{}]: '.format(domain) + if 'extra keys not allowed' in ex.error_message: + message += '[{}] is an invalid option for [{}]. Check: {}->{}.'\ + .format(ex.path[-1], domain, domain, + '->'.join('%s' % m for m in ex.path)) + else: + message += humanize_error(config, ex) + + if hasattr(config, '__line__'): + message += " (See {}:{})".format(config.__config_file__, + config.__line__ or '?') + + _LOGGER.error(message) diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index 032d46abf0f..91a05b37b5d 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -152,23 +152,6 @@ def time_period_str(value: str) -> timedelta: time_period = vol.Any(time_period_str, timedelta, time_period_dict) -def log_exception(logger, ex, domain, config): - """Generate log exception for config validation.""" - message = 'Invalid config for [{}]: '.format(domain) - if 'extra keys not allowed' in ex.error_message: - message += '[{}] is an invalid option for [{}]. Check: {}->{}.'\ - .format(ex.path[-1], domain, domain, - '->'.join('%s' % m for m in ex.path)) - else: - message += str(ex) - - if hasattr(config, '__line__'): - message += " (See {}:{})".format(config.__config_file__, - config.__line__ or '?') - - logger.error(message) - - def match_all(value): """Validator that matches all values.""" return value