mirror of
https://github.com/esphome/esphome.git
synced 2024-11-29 12:55:46 +01:00
[config] Improve error reporting (#6736)
This commit is contained in:
parent
636037cec1
commit
d5eeab81d6
@ -34,7 +34,7 @@ from esphome.voluptuous_schema import ExtraKeysInvalid
|
|||||||
from esphome.log import color, Fore
|
from esphome.log import color, Fore
|
||||||
import esphome.final_validate as fv
|
import esphome.final_validate as fv
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.types import ConfigType, ConfigPathType, ConfigFragmentType
|
from esphome.types import ConfigType, ConfigFragmentType
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ class Config(OrderedDict, fv.FinalValidateConfig):
|
|||||||
return doc_range
|
return doc_range
|
||||||
|
|
||||||
def get_nested_item(
|
def get_nested_item(
|
||||||
self, path: ConfigPathType, raise_error: bool = False
|
self, path: ConfigPath, raise_error: bool = False
|
||||||
) -> ConfigFragmentType:
|
) -> ConfigFragmentType:
|
||||||
data = self
|
data = self
|
||||||
for item_index in path:
|
for item_index in path:
|
||||||
@ -244,7 +244,7 @@ class Config(OrderedDict, fv.FinalValidateConfig):
|
|||||||
return path
|
return path
|
||||||
raise KeyError(f"ID {id} not found in configuration")
|
raise KeyError(f"ID {id} not found in configuration")
|
||||||
|
|
||||||
def get_config_for_path(self, path: ConfigPathType) -> ConfigFragmentType:
|
def get_config_for_path(self, path: ConfigPath) -> ConfigFragmentType:
|
||||||
return self.get_nested_item(path, raise_error=True)
|
return self.get_nested_item(path, raise_error=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -885,6 +885,9 @@ def _get_parent_name(path, config):
|
|||||||
# Sub-item
|
# Sub-item
|
||||||
break
|
break
|
||||||
return domain
|
return domain
|
||||||
|
# When processing a list, skip back over the index
|
||||||
|
while len(path) > 1 and isinstance(path[-1], int):
|
||||||
|
path = path[:-1]
|
||||||
return path[-1]
|
return path[-1]
|
||||||
|
|
||||||
|
|
||||||
@ -1106,7 +1109,14 @@ def read_config(command_line_substitutions):
|
|||||||
if errline:
|
if errline:
|
||||||
errstr += f" {errline}"
|
errstr += f" {errline}"
|
||||||
safe_print(errstr)
|
safe_print(errstr)
|
||||||
safe_print(indent(dump_dict(res, path)[0]))
|
split_dump = dump_dict(res, path)[0].splitlines()
|
||||||
|
# find the last error message
|
||||||
|
i = len(split_dump) - 1
|
||||||
|
while i > 10 and "\033[" not in split_dump[i]:
|
||||||
|
i = i - 1
|
||||||
|
# discard lines more than 4 beyond the last error
|
||||||
|
i = min(i + 4, len(split_dump))
|
||||||
|
safe_print(indent("\n".join(split_dump[:i])))
|
||||||
|
|
||||||
for err in res.errors:
|
for err in res.errors:
|
||||||
safe_print(color(Fore.BOLD_RED, err.msg))
|
safe_print(color(Fore.BOLD_RED, err.msg))
|
||||||
|
Loading…
Reference in New Issue
Block a user