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
« 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."""
3import argparse
4import sys
5from typing import List, Union
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)
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)
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
135 return api.main(parse_request(argv))