def build_parser() -> argparse.ArgumentParser:
"""Build the argument parser for the erpc-py CLI.
Returns:
Configured argument parser with all subcommands.
"""
parser = argparse.ArgumentParser(
prog="erpc-py",
description="Python CLI for managing eRPC — fault-tolerant EVM RPC proxy",
)
subparsers = parser.add_subparsers(dest="command", required=True)
# ── version ───────────────────────────────────────────────────────────
version_parser = subparsers.add_parser("version", help="Show version information")
version_parser.set_defaults(func=_cmd_version)
# ── health ────────────────────────────────────────────────────────────
health_parser = subparsers.add_parser("health", help="Check eRPC health status")
health_parser.add_argument("--url", default=DEFAULT_HEALTH_URL, help="Health endpoint URL")
health_parser.set_defaults(func=_cmd_health)
# ── metrics ───────────────────────────────────────────────────────────
metrics_parser = subparsers.add_parser("metrics", help="Display runtime metrics")
metrics_parser.add_argument("--url", default=DEFAULT_METRICS_URL, help="Metrics endpoint URL")
metrics_parser.set_defaults(func=_cmd_metrics)
# ── config ────────────────────────────────────────────────────────────
config_parser = subparsers.add_parser("config", help="Configuration management")
config_sub = config_parser.add_subparsers(dest="config_command", required=True)
gen_parser = config_sub.add_parser("generate", help="Generate eRPC config file")
gen_parser.add_argument(
"--chains", required=True, help="Comma-separated chain IDs (e.g., 1,137)"
)
gen_parser.add_argument("--upstreams", required=True, help="Comma-separated upstream URLs")
gen_parser.add_argument("--output", help="Output file path (default: stdout)")
gen_parser.set_defaults(func=_cmd_config_generate)
# ── install ───────────────────────────────────────────────────────────
install_parser = subparsers.add_parser("install", help="Install eRPC binary")
install_parser.add_argument("--version", required=True, help="eRPC version to install")
install_parser.add_argument("--dir", default="/usr/local/bin", help="Installation directory")
install_parser.set_defaults(func=_cmd_install)
# ── start ─────────────────────────────────────────────────────────────
start_parser = subparsers.add_parser("start", help="Start eRPC with config")
start_parser.add_argument("--config", required=True, help="Path to eRPC config file")
start_parser.add_argument("--port", type=int, help="Override server port")
start_parser.set_defaults(func=_cmd_start)
# ── stop ──────────────────────────────────────────────────────────────
stop_parser = subparsers.add_parser("stop", help="Gracefully stop eRPC")
stop_parser.set_defaults(func=_cmd_stop)
return parser