AkurAI Build
Menu

Public repository / 0908278601908726896075f810fec7409e85d203

AkurAI-EC2 / libexec/akurai-ec2-manifest.py

Latest change d7eb6622a4697643ecf906b39e64b71c72e8a69b - fix: harden v2 manifest install and parsing by Claude Code

#!/usr/bin/env python3
"""Flatten AkurAI EC2 TOML manifests into shell-friendly key/value records."""

from __future__ import annotations

import argparse
import datetime as dt
import json
import sys
import tomllib
from pathlib import Path
from typing import Any, Iterable


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Flatten a TOML manifest into key<TAB>value records."
    )
    parser.add_argument("manifest", help="Path to a TOML manifest file.")
    return parser.parse_args()


def encode_scalar(value: Any) -> str:
    if isinstance(value, bool):
        return "true" if value else "false"
    if isinstance(value, (int, float)):
        return str(value)
    if isinstance(value, (dt.date, dt.datetime, dt.time)):
        return value.isoformat()
    if isinstance(value, str):
        if any(ch in value for ch in ("\t", "\r", "\n", "\0")):
            raise ValueError("strings with tabs or newlines are not supported")
        return value
    raise ValueError(f"unsupported value type: {type(value).__name__}")


def encode_value(value: Any) -> str:
    if isinstance(value, list):
        parts = []
        for item in value:
            if isinstance(item, (dict, list)):
                raise ValueError("nested arrays or inline tables are not supported")
            parts.append(encode_scalar(item))
        return json.dumps(parts, separators=(",", ":"))
    return encode_scalar(value)


def flatten(prefix: str, value: Any) -> Iterable[tuple[str, str]]:
    if isinstance(value, dict):
        for child_key, child_value in value.items():
            dotted = f"{prefix}.{child_key}" if prefix else child_key
            yield from flatten(dotted, child_value)
        return
    if not prefix:
        raise ValueError("top-level scalar manifests are not supported")
    yield prefix, encode_value(value)


def main() -> int:
    args = parse_args()
    manifest_path = Path(args.manifest)
    with manifest_path.open("rb") as handle:
        data = tomllib.load(handle)
    for key, value in flatten("", data):
        sys.stdout.write(f"{key}\t{value}\n")
    return 0


if __name__ == "__main__":
    try:
        raise SystemExit(main())
    except ValueError as exc:
        print(f"error: {exc}", file=sys.stderr)
        raise SystemExit(1)