← Files LuciaARCHIVED FILE

modules/apertura-pratica/scripts/check_dependencies.py

1.54 KB · Oct 2, 2026 · 00:30 UTC

↓ Download file

"""Check Python dependencies declared by Apertura pratica."""

from __future__ import annotations

import argparse
import importlib.util
import re
import sys
from pathlib import Path


def _requirement_name(line: str) -> str:
    cleaned = line.split("#", 1)[0].strip()
    match = re.match(r"([A-Za-z0-9_.-]+)", cleaned)
    return match.group(1).lower() if match else ""


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument(
        "--requirements",
        action="append",
        default=[],
        help="Requirements file under the plugin root; repeat when needed.",
    )
    args = parser.parse_args()
    root = Path(__file__).resolve().parents[1]
    files = (
        [root / item for item in args.requirements]
        if args.requirements
        else [root / "requirements.txt"]
    )
    if not files or any(not path.is_file() for path in files):
        sys.stdout.write("MISSING_REQUIREMENTS_FILE\n")
        return 1
    missing: list[str] = []
    for path in files:
        for line in path.read_text(encoding="utf-8").splitlines():
            package = _requirement_name(line)
            if package and importlib.util.find_spec(package.replace("-", "_")) is None:
                missing.append(package)
    if missing:
        sys.stdout.write(
            "MISSING_DEPENDENCIES\n" + "\n".join(sorted(set(missing))) + "\n"
        )
        return 1
    sys.stdout.write("OK: all selected plugin dependencies are importable\n")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

SHA-256: a10da17901307f832bd7f6e910664c25ecccea11980a3eb96cfd7a94513700be