Coverage for src/zapy/cli.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-02-10 19:35 +0000

1import argparse 

2import sys 

3import textwrap 

4 

5 

6class ZapyCLI: 

7 

8 def __init__(self) -> None: 

9 parser = argparse.ArgumentParser( 

10 description="Zapy CLI", 

11 usage=textwrap.dedent( 

12 """\ 

13 zapy <command> [<args>] 

14 The most commonly used git commands are: 

15 start_server Start the zapy service 

16 connection Read or create connection config 

17 """ 

18 ), 

19 ) 

20 parser.add_argument("command", help="Subcommand to run") 

21 # parse_args defaults to [1:] for args, but you need to 

22 # exclude the rest of the args too, or validation will fail 

23 args = parser.parse_args(sys.argv[1:2]) 

24 if args.command is None or not hasattr(self, args.command): 

25 print("Unrecognized command") 

26 parser.print_help() 

27 sys.exit(1) 

28 else: 

29 # use dispatch pattern to invoke method with same name 

30 getattr(self, args.command)() 

31 sys.exit(0) 

32 

33 def start_server(self) -> None: 

34 parser = argparse.ArgumentParser(description="Start the zapy service") 

35 _ = parser.parse_args(sys.argv[2:]) 

36 from zapy.api.bootstrapper import start_server 

37 

38 start_server() 

39 

40 def connection(self) -> None: 

41 parser = argparse.ArgumentParser(description="Read or create connection") 

42 _ = parser.parse_args(sys.argv[2:]) 

43 from zapy.api import connection 

44 

45 conn_config = connection.load_server_config() 

46 

47 # print the json config 

48 print(conn_config.model_dump_json())