scripts/sync_module_requirements.py
Rama main · réplica de lectura del repositorio original.
"""Generate source/Docker dependency files from the same module manifests."""
from __future__ import annotations
import argparse
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def generated():
modules = {
p.stem: json.loads(p.read_text())
for p in (ROOT / "deeptutor/modules/manifests").glob("*.json")
}
header = "# Generated by scripts/sync_module_requirements.py; edit module manifests.\n"
result = {}
for name, row in modules.items():
dependencies = list(row["requirements"])
prefix = [] if name == "core" else ["-r ../core.txt"]
if name != "core":
prefix += [
f"-r {dependency}.txt" for dependency in row["requires"] if dependency != "core"
]
filename = "core.txt" if name == "core" else f"modules/{name}.txt"
result[filename] = header + "\n".join(prefix + dependencies) + "\n"
result["cli.txt"] = header + "-r core.txt\n"
result["server.txt"] = header + "-r modules/server.txt\n"
result["full.txt"] = (
header
+ "\n".join(
f"-r modules/{name}.txt"
for name in sorted(modules)
if name not in {"core", "renderer-manim"} and not name.startswith("parser-")
)
+ "\n"
)
return result
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--check", action="store_true")
args = parser.parse_args()
for filename, content in generated().items():
path = ROOT / "requirements" / filename
if args.check:
if not path.exists() or path.read_text() != content:
raise SystemExit(f"Stale dependency file: {path}")
else:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content)
if __name__ == "__main__":
main()