Coverage for rdak/cli.py: 0%
22 statements
« prev ^ index » next coverage.py v7.6.0, created at 2026-08-03 16:46 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2026-08-03 16:46 +0000
1# SPDX-License-Identifier: GPL-2.0-or-later
2# © 2026, Ansgar 🙀 <ansgar@debian.org>
4"""
5Command-line entry point for the rdak client.
7Usage: `rdak [-i INSTANCE] [--config PATH] [--json] <service> <verb> ...`.
9Global options come before the service name.
10"""
12import argparse
13import sys
14from collections.abc import Sequence
16from rdak import commands
17from rdak.errors import CliError
20def build_parser() -> argparse.ArgumentParser:
21 parser = argparse.ArgumentParser(
22 prog="rdak", description="Client for dak's RPC services."
23 )
24 parser.add_argument(
25 "-i",
26 "--instance",
27 help="instance to talk to (default: $RDAK_INSTANCE or default_instance)",
28 )
29 parser.add_argument("--config", help="path to the rdak config file")
30 parser.add_argument(
31 "--json", action="store_true", help="output machine-readable JSON"
32 )
33 services = parser.add_subparsers(dest="service", required=True)
34 for group in commands.COMMAND_GROUPS:
35 group.register(services)
36 return parser
39def main(argv: Sequence[str] | None = None) -> int:
40 parser = build_parser()
41 args = parser.parse_args(argv)
42 try:
43 return args.func(args)
44 except CliError as e:
45 print(f"rdak: error: {e}", file=sys.stderr)
46 return e.exit_code
49if __name__ == "__main__":
50 sys.exit(main())