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
« 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."""
3import argparse
4import sys
5from typing import List, Union
7import suhteita.suhteita as api
8from suhteita import APP_ALIAS, APP_ENV, BASE_URL, DEBUG, IDENTITY, IS_CLOUD, PROJECT, STORE, TOKEN, USER
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)
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
105 return api.main(parse_request(argv))