1
0
mirror of https://github.com/esphome/esphome.git synced 2025-04-13 14:20:29 +01:00

[nrf52, core] unified way how all platforms handle SplitDefault (#7715)

Co-authored-by: Tomasz Duda <tomaszduda23@gmai.com>
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
tomaszduda23 2025-02-27 21:24:28 +01:00 committed by GitHub
parent 476f1b701b
commit aed5020a83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1641,140 +1641,39 @@ class GenerateID(Optional):
super().__init__(key, default=lambda: None) super().__init__(key, default=lambda: None)
def _get_priority_default(*args): def _get_default_key(*args):
for arg in args: return ["_".join([CORE.target_platform] + list(args))]
if arg is not vol.UNDEFINED:
return arg
return vol.UNDEFINED
class SplitDefault(Optional): class SplitDefault(Optional):
"""Mark this key to have a split default for ESP8266/ESP32.""" """Mark this key to have a split default for ESP8266/ESP32."""
def __init__( def __init__(self, key, **kwargs):
self,
key,
esp8266=vol.UNDEFINED,
esp32=vol.UNDEFINED,
esp32_arduino=vol.UNDEFINED,
esp32_idf=vol.UNDEFINED,
esp32_s2=vol.UNDEFINED,
esp32_s2_arduino=vol.UNDEFINED,
esp32_s2_idf=vol.UNDEFINED,
esp32_s3=vol.UNDEFINED,
esp32_s3_arduino=vol.UNDEFINED,
esp32_s3_idf=vol.UNDEFINED,
esp32_c3=vol.UNDEFINED,
esp32_c3_arduino=vol.UNDEFINED,
esp32_c3_idf=vol.UNDEFINED,
esp32_c6=vol.UNDEFINED,
esp32_c6_arduino=vol.UNDEFINED,
esp32_c6_idf=vol.UNDEFINED,
esp32_h2=vol.UNDEFINED,
esp32_h2_arduino=vol.UNDEFINED,
esp32_h2_idf=vol.UNDEFINED,
rp2040=vol.UNDEFINED,
bk72xx=vol.UNDEFINED,
rtl87xx=vol.UNDEFINED,
host=vol.UNDEFINED,
):
super().__init__(key) super().__init__(key)
self._esp8266_default = vol.default_factory(esp8266)
self._esp32_arduino_default = vol.default_factory( self._defaults = {}
_get_priority_default(esp32_arduino, esp32)
) for platform_key, value in kwargs.items():
self._esp32_idf_default = vol.default_factory( self._defaults[platform_key] = vol.default_factory(value)
_get_priority_default(esp32_idf, esp32)
)
self._esp32_s2_arduino_default = vol.default_factory(
_get_priority_default(esp32_s2_arduino, esp32_s2, esp32_arduino, esp32)
)
self._esp32_s2_idf_default = vol.default_factory(
_get_priority_default(esp32_s2_idf, esp32_s2, esp32_idf, esp32)
)
self._esp32_s3_arduino_default = vol.default_factory(
_get_priority_default(esp32_s3_arduino, esp32_s3, esp32_arduino, esp32)
)
self._esp32_s3_idf_default = vol.default_factory(
_get_priority_default(esp32_s3_idf, esp32_s3, esp32_idf, esp32)
)
self._esp32_c3_arduino_default = vol.default_factory(
_get_priority_default(esp32_c3_arduino, esp32_c3, esp32_arduino, esp32)
)
self._esp32_c3_idf_default = vol.default_factory(
_get_priority_default(esp32_c3_idf, esp32_c3, esp32_idf, esp32)
)
self._esp32_c6_arduino_default = vol.default_factory(
_get_priority_default(esp32_c6_arduino, esp32_c6, esp32_arduino, esp32)
)
self._esp32_c6_idf_default = vol.default_factory(
_get_priority_default(esp32_c6_idf, esp32_c6, esp32_idf, esp32)
)
self._esp32_h2_arduino_default = vol.default_factory(
_get_priority_default(esp32_h2_arduino, esp32_h2, esp32_arduino, esp32)
)
self._esp32_h2_idf_default = vol.default_factory(
_get_priority_default(esp32_h2_idf, esp32_h2, esp32_idf, esp32)
)
self._rp2040_default = vol.default_factory(rp2040)
self._bk72xx_default = vol.default_factory(bk72xx)
self._rtl87xx_default = vol.default_factory(rtl87xx)
self._host_default = vol.default_factory(host)
@property @property
def default(self): def default(self):
if CORE.is_esp8266: keys = []
return self._esp8266_default
if CORE.is_esp32: if CORE.is_esp32:
from esphome.components.esp32 import get_esp32_variant from esphome.components.esp32 import get_esp32_variant
from esphome.components.esp32.const import ( from esphome.components.esp32.const import VARIANT_ESP32
VARIANT_ESP32C3,
VARIANT_ESP32C6,
VARIANT_ESP32H2,
VARIANT_ESP32S2,
VARIANT_ESP32S3,
)
variant = get_esp32_variant() variant = get_esp32_variant().replace(VARIANT_ESP32, "").lower()
if variant == VARIANT_ESP32S2: framework = CORE.target_framework.replace("esp-", "")
if CORE.using_arduino: if variant:
return self._esp32_s2_arduino_default keys += _get_default_key(variant, framework)
if CORE.using_esp_idf: keys += _get_default_key(variant)
return self._esp32_s2_idf_default keys += _get_default_key(framework)
elif variant == VARIANT_ESP32S3: keys += _get_default_key()
if CORE.using_arduino: for key in keys:
return self._esp32_s3_arduino_default if self._defaults.get(key) is not None:
if CORE.using_esp_idf: return self._defaults[key]
return self._esp32_s3_idf_default return vol.default_factory(vol.UNDEFINED)
elif variant == VARIANT_ESP32C3:
if CORE.using_arduino:
return self._esp32_c3_arduino_default
if CORE.using_esp_idf:
return self._esp32_c3_idf_default
elif variant == VARIANT_ESP32C6:
if CORE.using_arduino:
return self._esp32_c6_arduino_default
if CORE.using_esp_idf:
return self._esp32_c6_idf_default
elif variant == VARIANT_ESP32H2:
if CORE.using_arduino:
return self._esp32_h2_arduino_default
if CORE.using_esp_idf:
return self._esp32_h2_idf_default
else:
if CORE.using_arduino:
return self._esp32_arduino_default
if CORE.using_esp_idf:
return self._esp32_idf_default
if CORE.is_rp2040:
return self._rp2040_default
if CORE.is_bk72xx:
return self._bk72xx_default
if CORE.is_rtl87xx:
return self._rtl87xx_default
if CORE.is_host:
return self._host_default
raise NotImplementedError
@default.setter @default.setter
def default(self, value): def default(self, value):