This commit is contained in:
J. Nick Koston 2025-07-06 13:37:41 -05:00
parent a1f63c0dfc
commit 023fa4d220
No known key found for this signature in database
19 changed files with 70 additions and 74 deletions

View File

@ -10,6 +10,7 @@ from esphome.components.esp32.const import (
VARIANT_ESP32S2,
VARIANT_ESP32S3,
)
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_ANALOG,
@ -19,7 +20,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE
from esphome.helpers import filter_source_files_from_platform
CODEOWNERS = ["@esphome/core"]

View File

@ -1,4 +1,5 @@
import esphome.codegen as cg
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_BLOCK,
@ -9,7 +10,6 @@ from esphome.const import (
CONF_LOOP_TIME,
PlatformFramework,
)
from esphome.helpers import filter_source_files_from_platform
CODEOWNERS = ["@OttoWinter"]
DEPENDENCIES = ["logger"]

View File

@ -11,6 +11,7 @@ from esphome.components.esp32.const import (
VARIANT_ESP32S2,
VARIANT_ESP32S3,
)
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_DEFAULT,
@ -29,7 +30,6 @@ from esphome.const import (
PLATFORM_ESP8266,
PlatformFramework,
)
from esphome.helpers import filter_source_files_from_platform
WAKEUP_PINS = {
VARIANT_ESP32: [

View File

@ -2,6 +2,7 @@ from esphome import automation
import esphome.codegen as cg
from esphome.components import esp32
from esphome.components.const import CONF_REQUEST_HEADERS
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_ESP8266_DISABLE_SSL_SUPPORT,
@ -17,7 +18,7 @@ from esphome.const import (
__version__,
)
from esphome.core import CORE, Lambda
from esphome.helpers import IS_MACOS, filter_source_files_from_platform
from esphome.helpers import IS_MACOS
DEPENDENCIES = ["network"]
AUTO_LOAD = ["json", "watchdog"]

View File

@ -3,6 +3,7 @@ import logging
from esphome import pins
import esphome.codegen as cg
from esphome.components import esp32
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_ADDRESS,
@ -22,7 +23,6 @@ from esphome.const import (
)
from esphome.core import CORE, coroutine_with_priority
import esphome.final_validate as fv
from esphome.helpers import filter_source_files_from_platform
LOGGER = logging.getLogger(__name__)
CODEOWNERS = ["@esphome/core"]

View File

@ -3,6 +3,7 @@ import logging
from os.path import dirname, isfile, join
import esphome.codegen as cg
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_BOARD,
@ -24,7 +25,6 @@ from esphome.const import (
__version__,
)
from esphome.core import CORE
from esphome.helpers import filter_source_files_from_platform
from . import gpio # noqa
from .const import (

View File

@ -21,6 +21,7 @@ from esphome.components.libretiny.const import (
COMPONENT_LN882X,
COMPONENT_RTL87XX,
)
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_ARGS,
@ -45,7 +46,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE, Lambda, coroutine_with_priority
from esphome.helpers import filter_source_files_from_platform
CODEOWNERS = ["@esphome/core"]
logger_ns = cg.esphome_ns.namespace("logger")

View File

@ -1,5 +1,6 @@
import esphome.codegen as cg
from esphome.components.esp32 import add_idf_component
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_DISABLED,
@ -11,7 +12,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE, coroutine_with_priority
from esphome.helpers import filter_source_files_from_platform
CODEOWNERS = ["@esphome/core"]
DEPENDENCIES = ["network"]

View File

@ -5,6 +5,7 @@ from esphome.automation import Condition
import esphome.codegen as cg
from esphome.components import logger
from esphome.components.esp32 import add_idf_sdkconfig_option
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_AVAILABILITY,
@ -57,7 +58,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE, coroutine_with_priority
from esphome.helpers import filter_source_files_from_platform
DEPENDENCIES = ["network"]

View File

@ -1,7 +1,7 @@
import esphome.codegen as cg
from esphome.components import uart
from esphome.config_helpers import filter_source_files_from_platform
from esphome.const import PlatformFramework
from esphome.helpers import filter_source_files_from_platform
nextion_ns = cg.esphome_ns.namespace("nextion")
Nextion = nextion_ns.class_("Nextion", cg.PollingComponent, uart.UARTDevice)

View File

@ -1,5 +1,6 @@
from esphome import automation
import esphome.codegen as cg
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_ESPHOME,
@ -10,7 +11,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE, coroutine_with_priority
from esphome.helpers import filter_source_files_from_platform
CODEOWNERS = ["@esphome/core"]
AUTO_LOAD = ["md5", "safe_mode"]

View File

@ -1,6 +1,7 @@
from esphome import pins
import esphome.codegen as cg
from esphome.components import esp32, esp32_rmt, remote_base
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_BUFFER_SIZE,
@ -18,7 +19,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE, TimePeriod
from esphome.helpers import filter_source_files_from_platform
CONF_FILTER_SYMBOLS = "filter_symbols"
CONF_RECEIVE_SYMBOLS = "receive_symbols"

View File

@ -1,6 +1,7 @@
from esphome import automation, pins
import esphome.codegen as cg
from esphome.components import esp32, esp32_rmt, remote_base
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_CARRIER_DUTY_PERCENT,
@ -15,7 +16,6 @@ from esphome.const import (
PlatformFramework,
)
from esphome.core import CORE
from esphome.helpers import filter_source_files_from_platform
AUTO_LOAD = ["remote_base"]

View File

@ -13,6 +13,7 @@ from esphome.components.esp32.const import (
VARIANT_ESP32S2,
VARIANT_ESP32S3,
)
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_CLK_PIN,
@ -35,7 +36,6 @@ from esphome.const import (
)
from esphome.core import CORE, coroutine_with_priority
import esphome.final_validate as fv
from esphome.helpers import filter_source_files_from_platform
CODEOWNERS = ["@esphome/core", "@clydebarrow"]
spi_ns = cg.esphome_ns.namespace("spi")

View File

@ -2,6 +2,7 @@ import re
from esphome import automation, pins
import esphome.codegen as cg
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_AFTER,
@ -31,7 +32,6 @@ from esphome.const import (
)
from esphome.core import CORE
import esphome.final_validate as fv
from esphome.helpers import filter_source_files_from_platform
from esphome.yaml_util import make_data_base
CODEOWNERS = ["@esphome/core"]

View File

@ -3,6 +3,7 @@ from esphome.automation import Condition
import esphome.codegen as cg
from esphome.components.esp32 import add_idf_sdkconfig_option, const, get_esp32_variant
from esphome.components.network import IPAddress
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_AP,
@ -43,7 +44,6 @@ from esphome.const import (
)
from esphome.core import CORE, HexInt, coroutine_with_priority
import esphome.final_validate as fv
from esphome.helpers import filter_source_files_from_platform
from . import wpa2_eap

View File

@ -1,4 +1,13 @@
from esphome.const import CONF_ID
from collections.abc import Callable
from esphome.const import (
CONF_ID,
KEY_CORE,
KEY_TARGET_FRAMEWORK,
KEY_TARGET_PLATFORM,
PlatformFramework,
)
from esphome.core import CORE
class Extend:
@ -103,3 +112,45 @@ def merge_config(full_old, full_new):
return new
return merge(full_old, full_new)
def filter_source_files_from_platform(
files_map: dict[str, set[PlatformFramework]],
) -> Callable[[], list[str]]:
"""Helper to build a FILTER_SOURCE_FILES function from platform mapping.
Args:
files_map: Dict mapping filename to set of PlatformFramework enums
that should compile this file
Returns:
Function that returns list of files to exclude for current platform
"""
# Pre-build lookup map from (platform, framework) tuples to PlatformFramework enum
_PLATFORM_FRAMEWORK_LOOKUP = {pf.value: pf for pf in PlatformFramework}
def filter_source_files() -> list[str]:
# Get current platform/framework
core_data = CORE.data.get(KEY_CORE, {})
target_platform = core_data.get(KEY_TARGET_PLATFORM)
target_framework = core_data.get(KEY_TARGET_FRAMEWORK)
if not target_platform or not target_framework:
return []
# Direct lookup of current PlatformFramework
current_platform_framework = _PLATFORM_FRAMEWORK_LOOKUP.get(
(target_platform, target_framework)
)
if not current_platform_framework:
return []
# Return files that should be excluded for current platform
return [
filename
for filename, platforms in files_map.items()
if current_platform_framework not in platforms
]
return filter_source_files

View File

@ -6,6 +6,7 @@ from pathlib import Path
from esphome import automation, core
import esphome.codegen as cg
from esphome.config_helpers import filter_source_files_from_platform
import esphome.config_validation as cv
from esphome.const import (
CONF_AREA,
@ -41,7 +42,6 @@ from esphome.const import (
from esphome.core import CORE, coroutine_with_priority
from esphome.helpers import (
copy_file_if_changed,
filter_source_files_from_platform,
fnv1a_32bit_hash,
get_str_env,
walk_files,

View File

@ -1,5 +1,4 @@
import codecs
from collections.abc import Callable
from contextlib import suppress
import ipaddress
import logging
@ -8,12 +7,8 @@ from pathlib import Path
import platform
import re
import tempfile
from typing import TYPE_CHECKING
from urllib.parse import urlparse
if TYPE_CHECKING:
from esphome.const import PlatformFramework
_LOGGER = logging.getLogger(__name__)
IS_MACOS = platform.system() == "Darwin"
@ -510,54 +505,3 @@ _DISALLOWED_CHARS = re.compile(r"[^a-zA-Z0-9-_]")
def sanitize(value):
"""Same behaviour as `helpers.cpp` method `str_sanitize`."""
return _DISALLOWED_CHARS.sub("_", value)
def filter_source_files_from_platform(
files_map: dict[str, set["PlatformFramework"]],
) -> Callable[[], list[str]]:
"""Helper to build a FILTER_SOURCE_FILES function from platform mapping.
Args:
files_map: Dict mapping filename to set of PlatformFramework enums
that should compile this file
Returns:
Function that returns list of files to exclude for current platform
"""
# Import here to avoid circular imports
from esphome.const import (
KEY_CORE,
KEY_TARGET_FRAMEWORK,
KEY_TARGET_PLATFORM,
PlatformFramework,
)
from esphome.core import CORE
# Pre-build lookup map from (platform, framework) tuples to PlatformFramework enum
_PLATFORM_FRAMEWORK_LOOKUP = {pf.value: pf for pf in PlatformFramework}
def filter_source_files() -> list[str]:
# Get current platform/framework
core_data = CORE.data.get(KEY_CORE, {})
target_platform = core_data.get(KEY_TARGET_PLATFORM)
target_framework = core_data.get(KEY_TARGET_FRAMEWORK)
if not target_platform or not target_framework:
return []
# Direct lookup of current PlatformFramework
current_platform_framework = _PLATFORM_FRAMEWORK_LOOKUP.get(
(target_platform, target_framework)
)
if not current_platform_framework:
return []
# Return files that should be excluded for current platform
return [
filename
for filename, platforms in files_map.items()
if current_platform_framework not in platforms
]
return filter_source_files