mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 09:01:49 +00:00 
			
		
		
		
	tweak
This commit is contained in:
		@@ -78,6 +78,38 @@ def uses_local_file_references(component_dir: Path) -> bool:
 | 
			
		||||
    return bool(re.search(r"\$\{?component_dir\}?", content))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def is_platform_component(component_dir: Path) -> bool:
 | 
			
		||||
    """Check if a component is a platform component (abstract base class).
 | 
			
		||||
 | 
			
		||||
    Platform components have IS_PLATFORM_COMPONENT = True and cannot be
 | 
			
		||||
    instantiated without a platform-specific implementation. These components
 | 
			
		||||
    define abstract methods and cause linker errors if compiled standalone.
 | 
			
		||||
 | 
			
		||||
    Examples: canbus, mcp23x08_base, mcp23x17_base
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        component_dir: Path to the component's test directory
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        True if this is a platform component
 | 
			
		||||
    """
 | 
			
		||||
    # Check in the actual component source, not tests
 | 
			
		||||
    # tests/components/X -> tests/components -> tests -> repo root
 | 
			
		||||
    repo_root = component_dir.parent.parent.parent
 | 
			
		||||
    comp_init = (
 | 
			
		||||
        repo_root / "esphome" / "components" / component_dir.name / "__init__.py"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if not comp_init.exists():
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        content = comp_init.read_text()
 | 
			
		||||
        return "IS_PLATFORM_COMPONENT = True" in content
 | 
			
		||||
    except Exception:  # pylint: disable=broad-exception-caught
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def extract_common_buses(yaml_file: Path) -> set[str]:
 | 
			
		||||
    """Extract which common bus configs are included in a YAML test file.
 | 
			
		||||
 | 
			
		||||
@@ -149,7 +181,7 @@ def analyze_all_components(
 | 
			
		||||
    Returns:
 | 
			
		||||
        Tuple of:
 | 
			
		||||
        - Dictionary mapping component name to platform->buses mapping
 | 
			
		||||
        - Set of component names that use local files (cannot be grouped)
 | 
			
		||||
        - Set of component names that cannot be grouped (use local files or are platform components)
 | 
			
		||||
    """
 | 
			
		||||
    if tests_dir is None:
 | 
			
		||||
        tests_dir = Path("tests/components")
 | 
			
		||||
@@ -175,6 +207,11 @@ def analyze_all_components(
 | 
			
		||||
        if uses_local_file_references(component_dir):
 | 
			
		||||
            non_groupable.add(component_name)
 | 
			
		||||
 | 
			
		||||
        # Check if component is a platform component (abstract base class)
 | 
			
		||||
        # Platform components define abstract methods and cause linker errors
 | 
			
		||||
        if is_platform_component(component_dir):
 | 
			
		||||
            non_groupable.add(component_name)
 | 
			
		||||
 | 
			
		||||
    return components, non_groupable
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -280,6 +317,8 @@ def main() -> None:
 | 
			
		||||
                components[comp] = platform_buses
 | 
			
		||||
            if uses_local_file_references(comp_dir):
 | 
			
		||||
                non_groupable.add(comp)
 | 
			
		||||
            if is_platform_component(comp_dir):
 | 
			
		||||
                non_groupable.add(comp)
 | 
			
		||||
    else:
 | 
			
		||||
        # Analyze all components
 | 
			
		||||
        components, non_groupable = analyze_all_components(tests_dir)
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ display:
 | 
			
		||||
 | 
			
		||||
touchscreen:
 | 
			
		||||
  - platform: ft63x6
 | 
			
		||||
    id: ft63x6_touchscreen
 | 
			
		||||
    interrupt_pin: ${interrupt_pin}
 | 
			
		||||
    transform:
 | 
			
		||||
      swap_xy: true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user