Disallow variant/family override for known boards (#6512)

This commit is contained in:
Clyde Stubbs 2024-04-23 08:04:56 +10:00 committed by Jesse Hills
parent dd8be524b4
commit 03d547d2c0
No known key found for this signature in database
GPG key ID: BEAAE804EFD8E83A
2 changed files with 37 additions and 19 deletions

View file

@ -316,17 +316,26 @@ def _parse_platform_version(value):
def _detect_variant(value): def _detect_variant(value):
if CONF_VARIANT not in value: board = value[CONF_BOARD]
board = value[CONF_BOARD] if board in BOARDS:
if board not in BOARDS: variant = BOARDS[board][KEY_VARIANT]
if CONF_VARIANT in value and variant != value[CONF_VARIANT]:
raise cv.Invalid( raise cv.Invalid(
"This board is unknown, please set the variant manually", f"Option '{CONF_VARIANT}' does not match selected board.",
path=[CONF_VARIANT],
)
value = value.copy()
value[CONF_VARIANT] = variant
else:
if CONF_VARIANT not in value:
raise cv.Invalid(
"This board is unknown, if you are sure you want to compile with this board selection, "
f"override with option '{CONF_VARIANT}'",
path=[CONF_BOARD], path=[CONF_BOARD],
) )
_LOGGER.warning(
value = value.copy() "This board is unknown. Make sure the chosen chip component is correct.",
value[CONF_VARIANT] = BOARDS[board][KEY_VARIANT] )
return value return value

View file

@ -1,6 +1,10 @@
import json import json
import logging import logging
from os.path import dirname, isfile, join from os.path import (
dirname,
isfile,
join,
)
import esphome.codegen as cg import esphome.codegen as cg
import esphome.config_validation as cv import esphome.config_validation as cv
@ -55,15 +59,25 @@ def _detect_variant(value):
component: LibreTinyComponent = CORE.data[KEY_LIBRETINY][KEY_COMPONENT_DATA] component: LibreTinyComponent = CORE.data[KEY_LIBRETINY][KEY_COMPONENT_DATA]
board = value[CONF_BOARD] board = value[CONF_BOARD]
# read board-default family if not specified # read board-default family if not specified
if CONF_FAMILY not in value: if board not in component.boards:
if board not in component.boards: if CONF_FAMILY not in value:
raise cv.Invalid( raise cv.Invalid(
"This board is unknown, please set the family manually. " "This board is unknown, if you are sure you want to compile with this board selection, "
"Also, make sure the chosen chip component is correct.", f"override with option '{CONF_FAMILY}'",
path=[CONF_BOARD], path=[CONF_BOARD],
) )
_LOGGER.warning(
"This board is unknown. Make sure the chosen chip component is correct.",
)
else:
family = component.boards[board][KEY_FAMILY]
if CONF_FAMILY in value and family != value[CONF_FAMILY]:
raise cv.Invalid(
f"Option '{CONF_FAMILY}' does not match selected board.",
path=[CONF_FAMILY],
)
value = value.copy() value = value.copy()
value[CONF_FAMILY] = component.boards[board][KEY_FAMILY] value[CONF_FAMILY] = family
# read component name matching this family # read component name matching this family
value[CONF_COMPONENT_ID] = FAMILY_COMPONENT[value[CONF_FAMILY]] value[CONF_COMPONENT_ID] = FAMILY_COMPONENT[value[CONF_FAMILY]]
# make sure the chosen component matches the family # make sure the chosen component matches the family
@ -72,11 +86,6 @@ def _detect_variant(value):
f"The chosen family doesn't belong to '{component.name}' component. The correct component is '{value[CONF_COMPONENT_ID]}'", f"The chosen family doesn't belong to '{component.name}' component. The correct component is '{value[CONF_COMPONENT_ID]}'",
path=[CONF_FAMILY], path=[CONF_FAMILY],
) )
# warn anyway if the board wasn't found
if board not in component.boards:
_LOGGER.warning(
"This board is unknown. Make sure the chosen chip component is correct.",
)
return value return value