#!/usr/bin/env python3 """Read Ultimate identity and REST API version without changing device state.""" from __future__ import annotations import argparse import json import os from pathlib import Path import sys from ultimate_rest import UltimateRestClient, UltimateRestError def write_report(path: Path, result: dict[str, object]) -> None: path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(result, indent=2, sort_keys=True) + "\n") def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description="Read C64 Ultimate identity through its REST API." ) parser.add_argument("host", help="device hostname or IPv4 address") parser.add_argument("--timeout", type=float, default=3.0) parser.add_argument( "--retries", type=int, default=2, help="bounded retries for these read-only requests (default: 2)", ) parser.add_argument("--report", type=Path, help="also write the JSON result here") parser.add_argument( "--password-env", default="C64U_PASSWORD", help="environment variable containing the network password", ) return parser.parse_args() def main() -> int: args = parse_args() try: client = UltimateRestClient( args.host, timeout=args.timeout, password=os.environ.get(args.password_env), ) result = { "rest": client.json("/v1/version", retries=args.retries), "device": client.json("/v1/info", retries=args.retries), } if args.report: write_report(args.report, result) except (OSError, ValueError, UltimateRestError) as error: print(f"Probe failed: {error}", file=sys.stderr) return 1 print(json.dumps(result, indent=2, sort_keys=True)) return 0 if __name__ == "__main__": raise SystemExit(main())