mirror of
				https://github.com/home-assistant/core.git
				synced 2025-11-04 08:29:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Generate a summary of integration quality scales.
 | 
						|
 | 
						|
Run with python3 -m script.quality_scale_summary
 | 
						|
Data collected at https://docs.google.com/spreadsheets/d/1xEiwovRJyPohAv8S4ad2LAB-0A38s1HWmzHng8v-4NI
 | 
						|
"""
 | 
						|
 | 
						|
import csv
 | 
						|
from pathlib import Path
 | 
						|
import sys
 | 
						|
 | 
						|
from homeassistant.const import __version__ as current_version
 | 
						|
from homeassistant.util.json import load_json
 | 
						|
 | 
						|
COMPONENTS_DIR = Path("homeassistant/components")
 | 
						|
 | 
						|
 | 
						|
def generate_quality_scale_summary() -> list[str, int]:
 | 
						|
    """Generate a summary of integration quality scales."""
 | 
						|
    quality_scales = {
 | 
						|
        "virtual": 0,
 | 
						|
        "unknown": 0,
 | 
						|
        "legacy": 0,
 | 
						|
        "internal": 0,
 | 
						|
        "bronze": 0,
 | 
						|
        "silver": 0,
 | 
						|
        "gold": 0,
 | 
						|
        "platinum": 0,
 | 
						|
    }
 | 
						|
 | 
						|
    for manifest_path in COMPONENTS_DIR.glob("*/manifest.json"):
 | 
						|
        manifest = load_json(manifest_path)
 | 
						|
 | 
						|
        if manifest.get("integration_type") == "virtual":
 | 
						|
            quality_scales["virtual"] += 1
 | 
						|
        elif quality_scale := manifest.get("quality_scale"):
 | 
						|
            quality_scales[quality_scale] += 1
 | 
						|
        else:
 | 
						|
            quality_scales["unknown"] += 1
 | 
						|
 | 
						|
    return quality_scales
 | 
						|
 | 
						|
 | 
						|
def output_csv(quality_scales: dict[str, int], print_header: bool) -> None:
 | 
						|
    """Output the quality scale summary as CSV."""
 | 
						|
    writer = csv.writer(sys.stdout)
 | 
						|
    if print_header:
 | 
						|
        writer.writerow(
 | 
						|
            [
 | 
						|
                "Version",
 | 
						|
                "Total",
 | 
						|
                "Virtual",
 | 
						|
                "Unknown",
 | 
						|
                "Legacy",
 | 
						|
                "Internal",
 | 
						|
                "Bronze",
 | 
						|
                "Silver",
 | 
						|
                "Gold",
 | 
						|
                "Platinum",
 | 
						|
            ]
 | 
						|
        )
 | 
						|
 | 
						|
    # Calculate total
 | 
						|
    total = sum(quality_scales.values())
 | 
						|
 | 
						|
    # Write the summary
 | 
						|
    writer.writerow(
 | 
						|
        [
 | 
						|
            current_version,
 | 
						|
            total,
 | 
						|
            quality_scales["virtual"],
 | 
						|
            quality_scales["unknown"],
 | 
						|
            quality_scales["legacy"],
 | 
						|
            quality_scales["internal"],
 | 
						|
            quality_scales["bronze"],
 | 
						|
            quality_scales["silver"],
 | 
						|
            quality_scales["gold"],
 | 
						|
            quality_scales["platinum"],
 | 
						|
        ]
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
def main() -> None:
 | 
						|
    """Run the script."""
 | 
						|
    quality_scales = generate_quality_scale_summary()
 | 
						|
    output_csv(quality_scales, "--header" in sys.argv)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |