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
« 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."""
3import argparse
4import sys
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)
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)
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
134 return api.main(parse_request(argv))