Coverage for suhteita / cli.py: 100.00%

22 statements  

« prev     ^ index     » next       coverage.py v7.13.2, created at 2026-02-03 22:42:42 +00:00

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

2 

3import argparse 

4import sys 

5 

6import suhteita.suhteita as api 

7from suhteita import ( 

8 APP_ALIAS, 

9 APP_ENV, 

10 BASE_URL, 

11 DEBUG, 

12 IDENTITY, 

13 IS_CLOUD, 

14 PROJECT, 

15 STORE, 

16 TOKEN, 

17 USER, 

18 WORKFLOW_CSV, 

19) 

20 

21 

22def parse_request(argv: list[str]) -> argparse.Namespace: 

23 """DRY.""" 

24 parser = argparse.ArgumentParser(description=APP_ALIAS) 

25 parser.add_argument( 

26 '--user', 

27 '-u', 

28 dest='user', 

29 default=USER, 

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

31 ) 

32 parser.add_argument( 

33 '--token', 

34 '-T', 

35 dest='token', 

36 default=TOKEN, 

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

38 ) 

39 parser.add_argument( 

40 '--target', 

41 '-t', 

42 dest='target_url', 

43 default=BASE_URL, 

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

45 ) 

46 parser.add_argument( 

47 '--is-cloud', 

48 action='store_true', 

49 dest='is_cloud', 

50 default=IS_CLOUD, 

51 help=( 

52 'target is cloud instance (default: ' 

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

54 ), 

55 ) 

56 parser.add_argument( 

57 '--project', 

58 '-p', 

59 dest='target_project', 

60 default=PROJECT, 

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

62 ) 

63 parser.add_argument( 

64 '--scenario', 

65 '-s', 

66 dest='scenario', 

67 default='unknown', 

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

69 ) 

70 parser.add_argument( 

71 '--workflow', 

72 '-w', 

73 dest='workflow_csv', 

74 default=WORKFLOW_CSV, 

75 help=( 

76 'workflow triplet as comma separated values' 

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

78 ), 

79 ) 

80 parser.add_argument( 

81 '--identity', 

82 '-i', 

83 dest='identity', 

84 default=IDENTITY if IDENTITY else 'adhoc', 

85 help=( 

86 'identity of take for recording' 

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

88 ), 

89 ) 

90 parser.add_argument( 

91 '--out-path', 

92 '-o', 

93 dest='out_path', 

94 default=STORE if STORE else 'store', 

95 help=( 

96 'output folder path for recording' 

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

98 ), 

99 ) 

100 parser.add_argument( 

101 '--debug', 

102 '-d', 

103 action='store_true', 

104 dest='debug', 

105 default=DEBUG, 

106 help=( 

107 'emit debug level information (default: ' 

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

109 ), 

110 ) 

111 parser.add_argument( 

112 '--trace', 

113 action='store_true', 

114 dest='trace', 

115 default=False, 

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

117 ) 

118 parser.add_argument( 

119 '--version', 

120 '-V', 

121 action='store_true', 

122 dest='version', 

123 default=False, 

124 help='print version info and exit', 

125 ) 

126 return parser.parse_args(argv) 

127 

128 

129# pylint: disable=expression-not-assigned 

130def main(argv: list[str] | None = None) -> int: 

131 """Delegate processing to functional module.""" 

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

133 

134 return api.main(parse_request(argv))