Allow specifying multiple integrations (#150349)

This commit is contained in:
Paulus Schoutsen
2025-08-11 13:12:29 +02:00
committed by GitHub
parent 73cbc962f9
commit 531073acc0

View File

@@ -1,4 +1,4 @@
"""Install requirements for a given integration.""" """Install requirements for one or more integrations."""
import argparse import argparse
from pathlib import Path from pathlib import Path
@@ -12,39 +12,49 @@ from .util import valid_integration
def get_arguments() -> argparse.Namespace: def get_arguments() -> argparse.Namespace:
"""Get parsed passed in arguments.""" """Get parsed passed in arguments."""
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Install requirements for a given integration" description="Install requirements for one or more integrations"
) )
parser.add_argument( parser.add_argument(
"integration", type=valid_integration, help="Integration to target." "integrations",
nargs="+",
type=valid_integration,
help="Integration(s) to target.",
) )
return parser.parse_args() return parser.parse_args()
def main() -> int | None: def main() -> int | None:
"""Install requirements for a given integration.""" """Install requirements for the specified integrations."""
if not Path("requirements_all.txt").is_file(): if not Path("requirements_all.txt").is_file():
print("Run from project root") print("Run from project root")
return 1 return 1
args = get_arguments() args = get_arguments()
requirements = gather_recursive_requirements(args.integration) # Gather requirements for all specified integrations
all_requirements = set()
for integration in args.integrations:
requirements = gather_recursive_requirements(integration)
all_requirements.update(requirements)
cmd = [ if all_requirements:
"uv", cmd = [
"pip", "uv",
"install", "pip",
"-c", "install",
"homeassistant/package_constraints.txt", "-c",
"-U", "homeassistant/package_constraints.txt",
*requirements, "-U",
] *sorted(all_requirements), # Sort for consistent output
print(" ".join(cmd)) ]
subprocess.run( print(" ".join(cmd))
cmd, subprocess.run(
check=True, cmd,
) check=True,
)
else:
print("No requirements to install.")
return None return None