Coverage for suhteita/cli.py: 100.00%

23 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2025-08-25 21:36:35 +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 ( 

9 APP_ALIAS, 

10 APP_ENV, 

11 BASE_URL, 

12 DEBUG, 

13 IDENTITY, 

14 IS_CLOUD, 

15 PROJECT, 

16 STORE, 

17 TOKEN, 

18 USER, 

19 WORKFLOW_CSV, 

20) 

21 

22 

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

24 """DRY.""" 

25 parser = argparse.ArgumentParser(description=APP_ALIAS) 

26 parser.add_argument( 

27 '--user', 

28 '-u', 

29 dest='user', 

30 default=USER, 

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

32 ) 

33 parser.add_argument( 

34 '--token', 

35 '-T', 

36 dest='token', 

37 default=TOKEN, 

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

39 ) 

40 parser.add_argument( 

41 '--target', 

42 '-t', 

43 dest='target_url', 

44 default=BASE_URL, 

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

46 ) 

47 parser.add_argument( 

48 '--is-cloud', 

49 action='store_true', 

50 dest='is_cloud', 

51 default=IS_CLOUD, 

52 help=( 

53 'target is cloud instance (default: ' 

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

55 ), 

56 ) 

57 parser.add_argument( 

58 '--project', 

59 '-p', 

60 dest='target_project', 

61 default=PROJECT, 

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

63 ) 

64 parser.add_argument( 

65 '--scenario', 

66 '-s', 

67 dest='scenario', 

68 default='unknown', 

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

70 ) 

71 parser.add_argument( 

72 '--workflow', 

73 '-w', 

74 dest='workflow_csv', 

75 default=WORKFLOW_CSV, 

76 help=( 

77 'workflow triplet as comma separated values' 

78 f'(default: "{WORKFLOW_CSV if WORKFLOW_CSV else "None, set SUHTEITA_WORKFLOW_CSV for default"}")' 

79 ), 

80 ) 

81 parser.add_argument( 

82 '--identity', 

83 '-i', 

84 dest='identity', 

85 default=IDENTITY if IDENTITY else 'adhoc', 

86 help=( 

87 'identity of take for recording' 

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

89 ), 

90 ) 

91 parser.add_argument( 

92 '--out-path', 

93 '-o', 

94 dest='out_path', 

95 default=STORE if STORE else 'store', 

96 help=( 

97 'output folder path for recording' 

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

99 ), 

100 ) 

101 parser.add_argument( 

102 '--debug', 

103 '-d', 

104 action='store_true', 

105 dest='debug', 

106 default=DEBUG, 

107 help=( 

108 'emit debug level information (default: ' 

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

110 ), 

111 ) 

112 parser.add_argument( 

113 '--trace', 

114 action='store_true', 

115 dest='trace', 

116 default=False, 

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

118 ) 

119 parser.add_argument( 

120 '--version', 

121 '-V', 

122 action='store_true', 

123 dest='version', 

124 default=False, 

125 help='print version info and exit', 

126 ) 

127 return parser.parse_args(argv) 

128 

129 

130# pylint: disable=expression-not-assigned 

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

132 """Delegate processing to functional module.""" 

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

134 

135 return api.main(parse_request(argv))