core/script/quality_scale_summary.py
Paulus Schoutsen c888502671
Add quality scale summary generator (#141780)
* Add quality scale summary generator

* Remove executable bit

* Split out virtual
2025-03-31 14:41:13 +02:00

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()