Ctrl K
ComunidadGuías…

scripts/sync_module_requirements.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""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()