Skip to content

Commit 8c2a989

Browse files
author
João Silva
committed
!48 docs(CLI): [#86] Probely SDK/CLI - Improve --help docs Closes #86
1 parent 0dbae7a commit 8c2a989

5 files changed

Lines changed: 157 additions & 73 deletions

File tree

probely/cli/commands/findings/parsers.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
from rich_argparse import RichHelpFormatter
44

55
from probely.cli.commands.findings.get import findings_get_command_handler
6+
from probely.cli.commands.help_texts import (
7+
SUB_COMMAND_AVAILABLE_ACTIONS_TITLE,
8+
FINDINGS_F_SEARCH_TEXT,
9+
FINDINGS_GET_COMMAND_DESCRIPTION_TEXT,
10+
)
611
from probely.cli.common import show_help
712
from probely.sdk.enums import FindingSeverityEnum, FindingStateEnum
813
from probely.settings import FALSY_VALUES, TRUTHY_VALUES
@@ -49,7 +54,8 @@ def build_findings_filters_parser() -> argparse.ArgumentParser:
4954

5055
findings_filters_parser.add_argument(
5156
"--f-search",
52-
help="Filter findings by keyword",
57+
metavar="SEARCH_TERM",
58+
help=FINDINGS_F_SEARCH_TEXT,
5359
action="store",
5460
)
5561

@@ -79,11 +85,13 @@ def build_findings_parser(commands_parser, configs_parser, output_parser):
7985
formatter_class=RichHelpFormatter,
8086
)
8187

82-
findings_command_parser = findings_parser.add_subparsers()
88+
findings_command_parser = findings_parser.add_subparsers(
89+
title=SUB_COMMAND_AVAILABLE_ACTIONS_TITLE,
90+
)
8391

8492
findings_get_parser = findings_command_parser.add_parser(
8593
"get",
86-
help="Lists all findings",
94+
help=FINDINGS_GET_COMMAND_DESCRIPTION_TEXT,
8795
parents=[configs_parser, findings_filter_parser, output_parser],
8896
formatter_class=RichHelpFormatter,
8997
)
@@ -92,7 +100,7 @@ def build_findings_parser(commands_parser, configs_parser, output_parser):
92100
"findings_ids",
93101
metavar="FINDING_ID",
94102
nargs="*",
95-
help="IDs of findings to list",
103+
help="Identifiers of the findings to list",
96104
)
97105

98106
findings_get_parser.set_defaults(

probely/cli/commands/help_texts.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
SUB_COMMAND_AVAILABLE_ACTIONS_TITLE = "Available Actions"
2+
3+
TARGETS_GET_COMMAND_DESCRIPTION_TEXT = (
4+
"List your account's targets. Use filters or identifiers to narrow the list"
5+
)
6+
TARGETS_ADD_COMMAND_DESCRIPTION_TEXT = "Add WEB or API targets you intend to scan"
7+
TARGETS_UPDATE_COMMAND_DESCRIPTION_TEXT = (
8+
"Edit targets given by identifiers or the results of filters"
9+
)
10+
TARGETS_START_SCAN_COMMAND_DESCRIPTION_TEXT = (
11+
"Scan targets given by identifiers or the results of filters"
12+
)
13+
TARGETS_DELETE_COMMAND_DESCRIPTION_TEXT = (
14+
"Delete targets given by identifiers or the results of filters"
15+
)
16+
17+
18+
SCANS_GET_COMMAND_DESCRIPTION_TEXT = (
19+
"List scans. Use filters or identifiers to narrow the list"
20+
)
21+
SCANS_PAUSE_COMMAND_DESCRIPTION_TEXT = (
22+
"Pause running scans given by identifiers or the results of filters"
23+
)
24+
SCANS_CANCEL_COMMAND_DESCRIPTION_TEXT = (
25+
"Stop unfinished scans given by identifiers or the results of filters"
26+
)
27+
SCANS_RESUME_COMMAND_DESCRIPTION_TEXT = (
28+
"Resume paused scans given by identifiers or the results of filters"
29+
)
30+
31+
32+
FINDINGS_GET_COMMAND_DESCRIPTION_TEXT = (
33+
"List findings. Use filters or identifiers to narrow the list"
34+
)
35+
36+
TARGETS_F_SEARCH_TEXT = "Filter Targets matching name, url or labels"
37+
SCANS_F_SEARCH_TEXT = (
38+
"Filter scans matching the scan URL, target name, target URL, or labels"
39+
)
40+
FINDINGS_F_SEARCH_TEXT = (
41+
"Filter findings matching definition name, value, labels, or the target URL"
42+
)

probely/cli/commands/parsers.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from rich_argparse import RichHelpFormatter
44

5-
from probely.cli.commands.apply.apply import apply_command_handler
65
from probely.cli.commands.findings.parsers import build_findings_parser
76
from probely.cli.commands.scans.parsers import build_scans_parser
87
from probely.cli.commands.targets.parsers import build_targets_parser
@@ -22,7 +21,7 @@ def build_file_parser():
2221
"--yaml-file",
2322
dest="yaml_file_path",
2423
default=None,
25-
help="Path to yaml file. Accepts same payload as listed in API docs",
24+
help="Path to file with content to apply. Accepts same payload as listed in API docs",
2625
)
2726

2827
return file_parser
@@ -36,12 +35,12 @@ def build_configs_parser():
3635
)
3736
configs_parser.add_argument(
3837
"--api-key",
39-
help="Set API KEY used for requests",
38+
help="Authorization token to make requests to the API",
4039
default=None,
4140
)
4241
configs_parser.add_argument(
4342
"--debug",
44-
help="Enable DEBUG mode setting",
43+
help="Enables debug mode setting",
4544
action="store_true",
4645
default=False,
4746
)
@@ -59,7 +58,7 @@ def build_output_parser():
5958
"--output",
6059
type=str.upper,
6160
choices=OutputEnum.cli_input_choices(),
62-
help="Presets for output formats",
61+
help="Changes the output formats based on presets",
6362
)
6463
return output_parser
6564

@@ -71,7 +70,7 @@ def build_cli_parser():
7170

7271
probely_parser = argparse.ArgumentParser(
7372
prog="probely",
74-
description="Welcome to Probely's CLI",
73+
description="Probely's CLI. Check subcommands for available actions",
7574
formatter_class=RichHelpFormatter,
7675
)
7776
probely_parser.add_argument(
@@ -83,7 +82,9 @@ def build_cli_parser():
8382
parser=probely_parser,
8483
)
8584

86-
commands_parser = probely_parser.add_subparsers()
85+
commands_parser = probely_parser.add_subparsers(
86+
title="Subcommands for available contexts"
87+
)
8788

8889
build_targets_parser(commands_parser, configs_parser, file_parser, output_parser)
8990
build_scans_parser(commands_parser, configs_parser, file_parser, output_parser)

probely/cli/commands/scans/parsers.py

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
from rich_argparse import RichHelpFormatter
44

5+
from probely.cli.commands.help_texts import (
6+
SCANS_PAUSE_COMMAND_DESCRIPTION_TEXT,
7+
SCANS_CANCEL_COMMAND_DESCRIPTION_TEXT,
8+
SCANS_RESUME_COMMAND_DESCRIPTION_TEXT,
9+
SCANS_GET_COMMAND_DESCRIPTION_TEXT,
10+
SUB_COMMAND_AVAILABLE_ACTIONS_TITLE,
11+
SCANS_F_SEARCH_TEXT,
12+
)
513
from probely.cli.commands.scans.cancel import scans_cancel_command_handler
614
from probely.cli.commands.scans.get import scans_get_command_handler
715
from probely.cli.commands.scans.pause import scans_pause_command_handler
@@ -16,12 +24,13 @@ def build_scan_filters_parser() -> argparse.ArgumentParser:
1624
add_help=False,
1725
formatter_class=RichHelpFormatter,
1826
)
27+
1928
scan_filters_parser.add_argument(
2029
"--f-search",
30+
metavar="SEARCH_TERM",
2131
action="store",
2232
default=None,
23-
metavar="SEARCH TERM",
24-
help="Keyword to match with Scan URL, Target name, URL or labels",
33+
help=SCANS_F_SEARCH_TEXT,
2534
)
2635

2736
scan_filters_parser.add_argument(
@@ -51,7 +60,7 @@ def build_scan_filters_parser() -> argparse.ArgumentParser:
5160
default=None,
5261
metavar="DATETIME",
5362
help=(
54-
f"Show scans {date_field} {description} the specified date or datetime."
63+
f"Filter scans {date_field} {description} the specified date or datetime."
5564
),
5665
)
5766
return scan_filters_parser
@@ -70,54 +79,77 @@ def build_scans_parser(commands_parser, configs_parser, file_parser, output_pars
7079
formatter_class=RichHelpFormatter,
7180
)
7281

73-
scans_command_parser = scans_parser.add_subparsers()
82+
scans_command_parser = scans_parser.add_subparsers(
83+
title=SUB_COMMAND_AVAILABLE_ACTIONS_TITLE,
84+
)
7485

7586
scan_filters_parser = build_scan_filters_parser()
7687

77-
scans_cancel_parser = scans_command_parser.add_parser(
78-
"cancel",
88+
scans_get_parser = scans_command_parser.add_parser(
89+
"get",
90+
help=SCANS_GET_COMMAND_DESCRIPTION_TEXT,
7991
parents=[configs_parser, scan_filters_parser, output_parser],
8092
formatter_class=RichHelpFormatter,
8193
)
82-
scans_cancel_parser.add_argument(
94+
scans_get_parser.add_argument(
8395
"scan_ids",
8496
metavar="SCAN_ID",
8597
nargs="*",
86-
help="IDs of scans to cancel",
98+
help="Identifiers of the scans to list",
8799
default=None,
88100
)
89-
scans_cancel_parser.set_defaults(
90-
command_handler=scans_cancel_command_handler,
91-
parser=scans_cancel_parser,
101+
scans_get_parser.set_defaults(
102+
command_handler=scans_get_command_handler,
103+
parser=scans_get_parser,
92104
)
93105

94-
scans_get_parser = scans_command_parser.add_parser(
95-
"get",
106+
scans_pause_parser = scans_command_parser.add_parser(
107+
"pause",
108+
help=SCANS_PAUSE_COMMAND_DESCRIPTION_TEXT,
96109
parents=[configs_parser, scan_filters_parser, output_parser],
97110
formatter_class=RichHelpFormatter,
98111
)
99-
scans_get_parser.add_argument(
112+
scans_pause_parser.add_argument(
100113
"scan_ids",
101114
metavar="SCAN_ID",
102115
nargs="*",
103-
help="IDs of Scans to list",
116+
help="Identifiers of the scans to pause.",
104117
default=None,
105118
)
106-
scans_get_parser.set_defaults(
107-
command_handler=scans_get_command_handler,
108-
parser=scans_get_parser,
119+
scans_pause_parser.set_defaults(
120+
command_handler=scans_pause_command_handler,
121+
parser=scans_pause_parser,
122+
)
123+
124+
scans_cancel_parser = scans_command_parser.add_parser(
125+
"cancel",
126+
help=SCANS_CANCEL_COMMAND_DESCRIPTION_TEXT,
127+
parents=[configs_parser, scan_filters_parser, output_parser],
128+
formatter_class=RichHelpFormatter,
129+
)
130+
scans_cancel_parser.add_argument(
131+
"scan_ids",
132+
metavar="SCAN_ID",
133+
nargs="*",
134+
help="Identifiers of the scans to cancel",
135+
default=None,
136+
)
137+
scans_cancel_parser.set_defaults(
138+
command_handler=scans_cancel_command_handler,
139+
parser=scans_cancel_parser,
109140
)
110141

111142
scans_resume_parser = scans_command_parser.add_parser(
112143
"resume",
144+
help=SCANS_RESUME_COMMAND_DESCRIPTION_TEXT,
113145
parents=[configs_parser, scan_filters_parser, output_parser],
114146
formatter_class=RichHelpFormatter,
115147
)
116148
scans_resume_parser.add_argument(
117149
"scan_ids",
118150
metavar="SCAN_ID",
119151
nargs="*",
120-
help="IDs of scans to resume",
152+
help="Identifiers of the scans to resume",
121153
default=None,
122154
)
123155
scans_resume_parser.add_argument(
@@ -129,19 +161,3 @@ def build_scans_parser(commands_parser, configs_parser, file_parser, output_pars
129161
command_handler=scans_resume_command_handler,
130162
parser=scans_resume_parser,
131163
)
132-
scans_pause_parser = scans_command_parser.add_parser(
133-
"pause",
134-
parents=[configs_parser, scan_filters_parser, output_parser],
135-
formatter_class=RichHelpFormatter,
136-
)
137-
scans_pause_parser.add_argument(
138-
"scan_ids",
139-
metavar="SCAN_ID",
140-
nargs="*",
141-
help="IDs of scans to pause",
142-
default=None,
143-
)
144-
scans_pause_parser.set_defaults(
145-
command_handler=scans_pause_command_handler,
146-
parser=scans_pause_parser,
147-
)

0 commit comments

Comments
 (0)