|
19 | 19 | from secops.cli.utils.config_utils import load_config |
20 | 20 |
|
21 | 21 |
|
22 | | -def add_common_args(parser: argparse.ArgumentParser) -> None: |
| 22 | +def _add_argument_if_not_exists( |
| 23 | + parser: argparse.ArgumentParser, *args: str, **kwargs |
| 24 | +) -> None: |
| 25 | + """Add argument to parser only if it typically doesn't exist. |
| 26 | +
|
| 27 | + Args: |
| 28 | + parser: Parser to add argument to |
| 29 | + *args: Positional arguments (flags) |
| 30 | + **kwargs: Keyword arguments |
| 31 | + """ |
| 32 | + try: |
| 33 | + parser.add_argument(*args, **kwargs) |
| 34 | + except argparse.ArgumentError: |
| 35 | + # Argument already exists, so we can skip it |
| 36 | + return |
| 37 | + |
| 38 | + |
| 39 | +def add_common_args( |
| 40 | + parser: argparse.ArgumentParser, suppress_defaults: bool = False |
| 41 | +) -> None: |
23 | 42 | """Add common arguments to a parser. |
24 | 43 |
|
25 | 44 | Args: |
26 | 45 | parser: Parser to add arguments to |
| 46 | + suppress_defaults: If True, do not set default values |
| 47 | + (let parent parser handle it) |
27 | 48 | """ |
28 | 49 | config = load_config() |
| 50 | + default_base = argparse.SUPPRESS if suppress_defaults else None |
29 | 51 |
|
30 | | - parser.add_argument( |
| 52 | + _add_argument_if_not_exists( |
| 53 | + parser, |
31 | 54 | "--service-account", |
32 | 55 | "--service_account", |
33 | 56 | dest="service_account", |
34 | | - default=config.get("service_account"), |
| 57 | + default=default_base or config.get("service_account"), |
35 | 58 | help="Path to service account JSON file", |
36 | 59 | ) |
37 | | - parser.add_argument( |
| 60 | + _add_argument_if_not_exists( |
| 61 | + parser, |
38 | 62 | "--output", |
39 | 63 | choices=["json", "text"], |
40 | | - default="json", |
| 64 | + default=default_base or "json", |
41 | 65 | help="Output format", |
42 | 66 | ) |
43 | 67 |
|
44 | 68 |
|
45 | | -def add_chronicle_args(parser: argparse.ArgumentParser) -> None: |
| 69 | +def add_chronicle_args( |
| 70 | + parser: argparse.ArgumentParser, suppress_defaults: bool = False |
| 71 | +) -> None: |
46 | 72 | """Add Chronicle-specific arguments to a parser. |
47 | 73 |
|
48 | 74 | Args: |
49 | 75 | parser: Parser to add arguments to |
| 76 | + suppress_defaults: If True, set default values to argparse.SUPPRESS |
50 | 77 | """ |
51 | 78 | config = load_config() |
| 79 | + default_base = argparse.SUPPRESS if suppress_defaults else None |
52 | 80 |
|
53 | | - parser.add_argument( |
| 81 | + _add_argument_if_not_exists( |
| 82 | + parser, |
54 | 83 | "--customer-id", |
55 | 84 | "--customer_id", |
56 | 85 | dest="customer_id", |
57 | | - default=config.get("customer_id"), |
| 86 | + default=default_base or config.get("customer_id"), |
58 | 87 | help="Chronicle instance ID", |
59 | 88 | ) |
60 | | - parser.add_argument( |
| 89 | + _add_argument_if_not_exists( |
| 90 | + parser, |
61 | 91 | "--project-id", |
62 | 92 | "--project_id", |
63 | 93 | dest="project_id", |
64 | | - default=config.get("project_id"), |
| 94 | + default=default_base or config.get("project_id"), |
65 | 95 | help="GCP project ID", |
66 | 96 | ) |
67 | | - parser.add_argument( |
| 97 | + _add_argument_if_not_exists( |
| 98 | + parser, |
68 | 99 | "--region", |
69 | | - default=config.get("region", "us"), |
| 100 | + default=default_base or config.get("region", "us"), |
70 | 101 | help="Chronicle API region", |
71 | 102 | ) |
72 | | - parser.add_argument( |
| 103 | + _add_argument_if_not_exists( |
| 104 | + parser, |
73 | 105 | "--api-version", |
74 | 106 | "--api_version", |
75 | 107 | dest="api_version", |
76 | 108 | choices=["v1", "v1beta", "v1alpha"], |
77 | | - default=config.get("api_version", "v1alpha"), |
| 109 | + default=default_base or config.get("api_version", "v1alpha"), |
78 | 110 | help=( |
79 | 111 | "Default API version for Chronicle requests " "(default: v1alpha)" |
80 | 112 | ), |
|
0 commit comments