mirror of
https://github.com/esphome/esphome.git
synced 2024-11-22 11:47:30 +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
|
||||
import esphome.final_validate as fv
|
||||
import esphome.config_validation as cv
|
||||
from esphome.types import ConfigType, ConfigPathType, ConfigFragmentType
|
||||
from esphome.types import ConfigType, ConfigFragmentType
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -213,7 +213,7 @@ class Config(OrderedDict, fv.FinalValidateConfig):
|
||||
return doc_range
|
||||
|
||||
def get_nested_item(
|
||||
self, path: ConfigPathType, raise_error: bool = False
|
||||
self, path: ConfigPath, raise_error: bool = False
|
||||
) -> ConfigFragmentType:
|
||||
data = self
|
||||
for item_index in path:
|
||||
@ -244,7 +244,7 @@ class Config(OrderedDict, fv.FinalValidateConfig):
|
||||
return path
|
||||
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)
|
||||
|
||||
@property
|
||||
@ -885,6 +885,9 @@ def _get_parent_name(path, config):
|
||||
# Sub-item
|
||||
break
|
||||
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]
|
||||
|
||||
|
||||
@ -1106,7 +1109,14 @@ def read_config(command_line_substitutions):
|
||||
if errline:
|
||||
errstr += f" {errline}"
|
||||
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:
|
||||
safe_print(color(Fore.BOLD_RED, err.msg))
|
||||
|
Loading…
Reference in New Issue
Block a user