Coverage for rdak/cli.py: 0%

22 statements  

« 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> 

3 

4""" 

5Command-line entry point for the rdak client. 

6 

7Usage: `rdak [-i INSTANCE] [--config PATH] [--json] <service> <verb> ...`. 

8 

9Global options come before the service name. 

10""" 

11 

12import argparse 

13import sys 

14from collections.abc import Sequence 

15 

16from rdak import commands 

17from rdak.errors import CliError 

18 

19 

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 

37 

38 

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 

47 

48 

49if __name__ == "__main__": 

50 sys.exit(main())