Coverage for suhteita/cli.py: 100.00%

21 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-03 13:32:01 +00:00

1"""CLI operations for relationships (Finnish: suhteita) maintained across distances as load test core.""" 

2 

3import argparse 

4import sys 

5from typing import List, Union 

6 

7import suhteita.suhteita as api 

8from suhteita import APP_ALIAS, APP_ENV, BASE_URL, DEBUG, IDENTITY, IS_CLOUD, PROJECT, STORE, TOKEN, USER 

9 

10 

11def parse_request(argv: List[str]) -> argparse.Namespace: 

12 """DRY.""" 

13 parser = argparse.ArgumentParser(description=APP_ALIAS) 

14 parser.add_argument( 

15 '--user', 

16 '-u', 

17 dest='user', 

18 default=USER, 

19 help=f'user (default: {USER if USER else f"None, set {APP_ENV}_USER for default"})', 

20 ) 

21 parser.add_argument( 

22 '--token', 

23 '-T', 

24 dest='token', 

25 default=TOKEN, 

26 help='token (default: ' ' set {APP_ENV}_TOKEN for default)', 

27 ) 

28 parser.add_argument( 

29 '--target', 

30 '-t', 

31 dest='target_url', 

32 default=BASE_URL, 

33 help=f'target URL (default: {BASE_URL if BASE_URL else f"None, set {APP_ENV}_BASE_URL for default"})', 

34 ) 

35 parser.add_argument( 

36 '--is-cloud', 

37 action='store_true', 

38 dest='is_cloud', 

39 default=IS_CLOUD, 

40 help=( 

41 'target is cloud instance (default: ' 

42 f'{"True" if IS_CLOUD else f"False, set {APP_ENV}_IS_CLOUD for a different default"})' 

43 ), 

44 ) 

45 parser.add_argument( 

46 '--project', 

47 '-p', 

48 dest='target_project', 

49 default=PROJECT, 

50 help=f'target project (default: {PROJECT if PROJECT else f"None, set {APP_ENV}_PROJECT for default"})', 

51 ) 

52 parser.add_argument( 

53 '--scenario', 

54 '-s', 

55 dest='scenario', 

56 default='unknown', 

57 help='scenario for recording (default: unknown)', 

58 ) 

59 parser.add_argument( 

60 '--identity', 

61 '-i', 

62 dest='identity', 

63 default=IDENTITY if IDENTITY else 'adhoc', 

64 help=( 

65 'identity of take for recording' 

66 f' (default: {IDENTITY if IDENTITY else f"adhoc, set {APP_ENV}_IDENTITY for default"})' 

67 ), 

68 ) 

69 parser.add_argument( 

70 '--out-path', 

71 '-o', 

72 dest='out_path', 

73 default=STORE if STORE else 'store', 

74 help=( 

75 'output folder path for recording' 

76 f' (default: {STORE if STORE else f"store, set {APP_ENV}_STORE for default"})' 

77 ), 

78 ) 

79 parser.add_argument( 

80 '--debug', 

81 '-d', 

82 action='store_true', 

83 dest='debug', 

84 default=DEBUG, 

85 help=( 

86 'emit debug level information (default: ' 

87 f'{"True" if DEBUG else f"False, set {APP_ENV}_DEBUG for a different default"})' 

88 ), 

89 ) 

90 parser.add_argument( 

91 '--trace', 

92 action='store_true', 

93 dest='trace', 

94 default=False, 

95 help='hand down debug level request to imported modules (default: "False")', 

96 ) 

97 return parser.parse_args(argv) 

98 

99 

100# pylint: disable=expression-not-assigned 

101def main(argv: Union[List[str], None] = None) -> int: 

102 """Delegate processing to functional module.""" 

103 argv = sys.argv[1:] if argv is None else argv 

104 

105 return api.main(parse_request(argv))