1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-12 06:43:48 +01:00

uart grouping

This commit is contained in:
J. Nick Koston
2025-10-08 18:10:45 -10:00
parent fd9f7db668
commit 72e0c3350d
2 changed files with 23 additions and 40 deletions

View File

@@ -24,6 +24,7 @@ Example output:
from __future__ import annotations
import argparse
from functools import lru_cache
import json
from pathlib import Path
import re
@@ -32,25 +33,23 @@ import sys
# Path to common bus configs
COMMON_BUS_PATH = Path("tests/test_build_components/common")
# Valid common bus config directories
# All bus types support component grouping for config validation since
# --testing-mode bypasses runtime conflicts (we only care that configs compile)
VALID_BUS_CONFIGS = {
"ble",
"i2c",
"i2c_low_freq",
"qspi",
"spi",
"uart",
"uart_115200",
"uart_1200",
"uart_1200_even",
"uart_19200",
"uart_38400",
"uart_4800",
"uart_4800_even",
"uart_9600_even",
}
@lru_cache(maxsize=1)
def get_common_bus_packages() -> frozenset[str]:
"""Get the list of common bus package names.
Reads from tests/test_build_components/common/ directory
and caches the result. All bus types support component grouping
for config validation since --testing-mode bypasses runtime conflicts.
Returns:
Frozenset of common bus package names (i2c, spi, uart, etc.)
"""
if not COMMON_BUS_PATH.exists():
return frozenset()
# List all directories in common/ - these are the bus package names
return frozenset(d.name for d in COMMON_BUS_PATH.iterdir() if d.is_dir())
def uses_local_file_references(component_dir: Path) -> bool:
@@ -97,6 +96,7 @@ def extract_common_buses(yaml_file: Path) -> set[str]:
return set()
buses = set()
valid_buses = get_common_bus_packages()
# Pattern to match package includes for common bus configs
# Matches: !include ../../test_build_components/common/{bus}/{platform}.yaml
@@ -104,7 +104,7 @@ def extract_common_buses(yaml_file: Path) -> set[str]:
for match in re.finditer(pattern, content):
bus_name = match.group(1)
if bus_name in VALID_BUS_CONFIGS:
if bus_name in valid_buses:
buses.add(bus_name)
return buses
@@ -199,7 +199,8 @@ def create_grouping_signature(
return ""
# Only include valid bus types in signature
valid_buses = [b for b in buses if b in VALID_BUS_CONFIGS]
common_buses = get_common_bus_packages()
valid_buses = [b for b in buses if b in common_buses]
if not valid_buses:
return ""

View File

@@ -16,7 +16,6 @@ The merger handles:
from __future__ import annotations
import argparse
from functools import lru_cache
from pathlib import Path
import re
import sys
@@ -27,24 +26,7 @@ sys.path.insert(0, str(Path(__file__).parent.parent))
from esphome import yaml_util
from esphome.config_helpers import merge_config
@lru_cache(maxsize=1)
def get_common_bus_packages() -> frozenset[str]:
"""Get the list of common bus package names.
Reads from tests/test_build_components/common/ directory
and caches the result.
Returns:
Frozenset of common bus package names (i2c, spi, uart, etc.)
"""
common_dir = Path("tests/test_build_components/common")
if not common_dir.exists():
return frozenset()
# List all directories in common/ - these are the bus package names
return frozenset(d.name for d in common_dir.iterdir() if d.is_dir())
from script.analyze_component_buses import get_common_bus_packages
def load_yaml_file(yaml_file: Path) -> dict: