1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-13 14:18:14 +00:00

move splitdefault

This commit is contained in:
Tomasz Duda 2025-02-24 19:35:41 +01:00
parent 35259fb4dc
commit b1a1a6788e
2 changed files with 47 additions and 42 deletions

View File

@ -1,10 +1,9 @@
import re
import voluptuous as vol
from esphome import automation
from esphome.automation import LambdaAction
import esphome.codegen as cg
from esphome.components import zephyr
from esphome.components.esp32 import add_idf_sdkconfig_option, get_esp32_variant
from esphome.components.esp32.const import (
VARIANT_ESP32,
@ -185,44 +184,6 @@ LoggerMessageTrigger = logger_ns.class_(
)
def _get_default_key(*args):
return ["_".join([CORE.target_platform] + list(args))]
# https://github.com/esphome/esphome/pull/7715
class _SplitDefault(cv.Optional):
"""Mark this key to have a split default for ESP8266/ESP32."""
def __init__(self, key, **kwargs):
super().__init__(key)
self._defaults = {}
for platform_key, value in kwargs.items():
self._defaults[platform_key] = vol.default_factory(value)
@property
def default(self):
keys = []
if CORE.is_esp32:
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):
# Ignore default set from vol.Optional
pass
PLATFORM_NRF52 = "nrf52"
CONF_ESP8266_STORE_LOG_STRINGS_IN_FLASH = "esp8266_store_log_strings_in_flash"
CONFIG_SCHEMA = cv.All(
@ -233,7 +194,7 @@ CONFIG_SCHEMA = cv.All(
cv.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.validate_bytes,
cv.Optional(CONF_DEASSERT_RTS_DTR, default=False): cv.boolean,
# https://github.com/esphome/esphome/pull/7715
_SplitDefault(
zephyr.SplitDefault(
CONF_HARDWARE_UART,
esp8266=UART0,
esp32=UART0,
@ -275,7 +236,7 @@ CONFIG_SCHEMA = cv.All(
}
),
# https://github.com/esphome/esphome/pull/7715
_SplitDefault(
zephyr.SplitDefault(
CONF_ESP8266_STORE_LOG_STRINGS_IN_FLASH, esp8266=True
): cv.All(cv.only_on_esp8266, cv.boolean),
}

View File

@ -1,7 +1,10 @@
import os
from typing import Union
import voluptuous as vol
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.const import CONF_BOARD, KEY_NAME
from esphome.core import CORE
from esphome.helpers import copy_file_if_changed, write_file_if_changed
@ -178,3 +181,44 @@ def copy_files():
file[KEY_PATH],
CORE.relative_build_path(file[KEY_NAME]),
)
def _get_default_key(*args):
return ["_".join([CORE.target_platform] + list(args))]
# https://github.com/esphome/esphome/pull/7715
class SplitDefault(cv.Optional):
"""Mark this key to have a split default for ESP8266/ESP32."""
def __init__(self, key, **kwargs):
super().__init__(key)
self._defaults = {}
for platform_key, value in kwargs.items():
self._defaults[platform_key] = vol.default_factory(value)
@property
def default(self):
keys = []
if CORE.is_esp32:
from esphome.components.esp32 import get_esp32_variant
from esphome.components.esp32.const import VARIANT_ESP32
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):
# Ignore default set from vol.Optional
pass