1
0
mirror of https://github.com/esphome/esphome.git synced 2025-04-12 22:00:30 +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)
def _get_priority_default(*args):
for arg in args:
if arg is not vol.UNDEFINED:
return arg
return vol.UNDEFINED
def _get_default_key(*args):
return ["_".join([CORE.target_platform] + list(args))]
class SplitDefault(Optional):
"""Mark this key to have a split default for ESP8266/ESP32."""
def __init__(
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,
):
def __init__(self, key, **kwargs):
super().__init__(key)
self._esp8266_default = vol.default_factory(esp8266)
self._esp32_arduino_default = vol.default_factory(
_get_priority_default(esp32_arduino, esp32)
)
self._esp32_idf_default = vol.default_factory(
_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)
self._defaults = {}
for platform_key, value in kwargs.items():
self._defaults[platform_key] = vol.default_factory(value)
@property
def default(self):
if CORE.is_esp8266:
return self._esp8266_default
keys = []
if CORE.is_esp32:
from esphome.components.esp32 import get_esp32_variant
from esphome.components.esp32.const import (
VARIANT_ESP32C3,
VARIANT_ESP32C6,
VARIANT_ESP32H2,
VARIANT_ESP32S2,
VARIANT_ESP32S3,
)
from esphome.components.esp32.const import VARIANT_ESP32
variant = get_esp32_variant()
if variant == VARIANT_ESP32S2:
if CORE.using_arduino:
return self._esp32_s2_arduino_default
if CORE.using_esp_idf:
return self._esp32_s2_idf_default
elif variant == VARIANT_ESP32S3:
if CORE.using_arduino:
return self._esp32_s3_arduino_default
if CORE.using_esp_idf:
return self._esp32_s3_idf_default
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
variant = get_esp32_variant().replace(VARIANT_ESP32, "").lower()
framework = CORE.target_framework.replace("esp-", "")
if variant:
keys += _get_default_key(variant, framework)
keys += _get_default_key(variant)
keys += _get_default_key(framework)
keys += _get_default_key()
for key in keys:
if self._defaults.get(key) is not None:
return self._defaults[key]
return vol.default_factory(vol.UNDEFINED)
@default.setter
def default(self, value):