Skip to content

Commit 65aef0b

Browse files
mondejagaborbernat
andauthored
Add custom subsection group prefix title support (#12)
Co-authored-by: Bernát Gábor <[email protected]>
1 parent 8929a9b commit 65aef0b

File tree

28 files changed

+495
-15
lines changed

28 files changed

+495
-15
lines changed

README.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ extensions = ["sphinx_argparse_cli"]
3131

3232
Within the reStructuredText files use the `sphinx_argparse_cli` directive that takes, at least, two arguments:
3333

34-
| Name | Description |
35-
| ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
36-
| module | the module path to where the parser is defined |
37-
| func | the name of the function that once called with no arguments constructs the parser |
38-
| prog | (optional) the module path to where the parser is defined |
39-
| title | (optional) when provided, overwrites the `<prog> - CLI interface` title added by default and when empty, will not be included |
40-
| usage_width | (optional) how large should usage examples be - defaults to 100 character |
34+
| Name | Description |
35+
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
36+
| module | the module path to where the parser is defined |
37+
| func | the name of the function that once called with no arguments constructs the parser |
38+
| prog | (optional) the module path to where the parser is defined |
39+
| title | (optional) when provided, overwrites the `<prog> - CLI interface` title added by default and when empty, will not be included |
40+
| usage_width | (optional) how large should usage examples be - defaults to 100 character |
41+
| group_title_prefix | (optional) groups subsections title prefixes, accepts the string `{prog}` as a replacement for the program name - defaults to `{prog}` |
42+
| group_sub_title_prefix | (optional) subcommands groups subsections title prefixes, accepts replacement of `{prog}` and `{subcommand}` for program and subcommand name - defaults to `{prog} {subcommand}` |
4143

4244
For example:
4345

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_title_prefix:
5+
:group_sub_title_prefix:
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="complex")
8+
parser.add_argument("--root", action="store_true", help="root flag")
9+
parser.add_argument("--no-help", action="store_true")
10+
parser.add_argument("--outdir", "-o", type=str, help="output directory", metavar="out_dir")
11+
parser.add_argument("--in-dir", "-i", type=str, help="input directory", dest="in_dir")
12+
13+
group = parser.add_argument_group("Exclusive", description="this is an exclusive group")
14+
exclusive = group.add_mutually_exclusive_group()
15+
exclusive.add_argument("--foo", action="store_true", help="foo")
16+
exclusive.add_argument("--bar", action="store_true", help="bar")
17+
18+
parser.add_argument_group("empty")
19+
20+
sub_parsers_a = parser.add_subparsers(title="sub-parser-a", description="sub parsers A", dest="command")
21+
sub_parsers_a.required = False
22+
sub_parsers_a.default = "first"
23+
24+
a_parser_first = sub_parsers_a.add_parser("first", aliases=["f"], help="a-first-help", description="a-first-desc")
25+
a_parser_first.add_argument("--flag", dest="a_par_first_flag", action="store_true", help="a parser first flag")
26+
a_parser_first.add_argument("--root", action="store_true", help="root flag")
27+
a_parser_first.add_argument("pos_one", help="first positional argument", metavar="one")
28+
a_parser_first.add_argument("pos_two", help="second positional argument", default=1)
29+
30+
a_parser_second = sub_parsers_a.add_parser("second")
31+
a_parser_second.add_argument("--flag", dest="a_par_second_flag", action="store_true", help="a parser second flag")
32+
a_parser_second.add_argument("--root", action="store_true", help="root flag")
33+
a_parser_second.add_argument("pos_one", help="first positional argument", metavar="one")
34+
a_parser_second.add_argument("pos_two", help="second positional argument", default="green")
35+
36+
sub_parsers_a.add_parser("third") # empty sub-command
37+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_sub_title_prefix: custom
5+
6+
.. sphinx_argparse_cli::
7+
:module: parser
8+
:func: make
9+
:group_title_prefix:
10+
:group_sub_title_prefix: custom-2
11+
12+
13+
.. sphinx_argparse_cli::
14+
:module: parser
15+
:func: make
16+
:group_title_prefix: myprog
17+
:group_sub_title_prefix: custom-3
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="complex")
8+
parser.add_argument("--root", action="store_true", help="root flag")
9+
parser.add_argument("--no-help", action="store_true")
10+
parser.add_argument("--outdir", "-o", type=str, help="output directory", metavar="out_dir")
11+
parser.add_argument("--in-dir", "-i", type=str, help="input directory", dest="in_dir")
12+
13+
group = parser.add_argument_group("Exclusive", description="this is an exclusive group")
14+
exclusive = group.add_mutually_exclusive_group()
15+
exclusive.add_argument("--foo", action="store_true", help="foo")
16+
exclusive.add_argument("--bar", action="store_true", help="bar")
17+
18+
parser.add_argument_group("empty")
19+
20+
sub_parsers_a = parser.add_subparsers(title="sub-parser-a", description="sub parsers A", dest="command")
21+
sub_parsers_a.required = False
22+
sub_parsers_a.default = "first"
23+
24+
a_parser_first = sub_parsers_a.add_parser("first", aliases=["f"], help="a-first-help", description="a-first-desc")
25+
a_parser_first.add_argument("--flag", dest="a_par_first_flag", action="store_true", help="a parser first flag")
26+
a_parser_first.add_argument("--root", action="store_true", help="root flag")
27+
a_parser_first.add_argument("pos_one", help="first positional argument", metavar="one")
28+
a_parser_first.add_argument("pos_two", help="second positional argument", default=1)
29+
30+
a_parser_second = sub_parsers_a.add_parser("second")
31+
a_parser_second.add_argument("--flag", dest="a_par_second_flag", action="store_true", help="a parser second flag")
32+
a_parser_second.add_argument("--root", action="store_true", help="root flag")
33+
a_parser_second.add_argument("pos_one", help="first positional argument", metavar="one")
34+
a_parser_second.add_argument("pos_two", help="second positional argument", default="green")
35+
36+
sub_parsers_a.add_parser("third") # empty sub-command
37+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_title_prefix: custom
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="prog")
8+
parser.add_argument("root")
9+
parser.add_argument("--root", action="store_true", help="root flag")
10+
11+
group = parser.add_argument_group("Exclusive", description="this is an exclusive group")
12+
exclusive = group.add_mutually_exclusive_group()
13+
exclusive.add_argument("--foo", action="store_true", help="foo")
14+
exclusive.add_argument("--bar", action="store_true", help="bar")
15+
16+
parser.add_argument_group("empty")
17+
18+
sub_parsers_a = parser.add_subparsers(title="sub-parser-a", description="sub parsers A", dest="command")
19+
sub_parsers_a.required = False
20+
sub_parsers_a.default = "first"
21+
22+
a_parser_first = sub_parsers_a.add_parser("first", aliases=["f"], help="a-first-help", description="a-first-desc")
23+
a_parser_first.add_argument("--flag", dest="a_par_first_flag", action="store_true", help="a parser first flag")
24+
a_parser_first.add_argument("--root", action="store_true", help="root flag")
25+
a_parser_first.add_argument("pos_one", help="first positional argument", metavar="one")
26+
a_parser_first.add_argument("pos_two", help="second positional argument", default=1)
27+
28+
a_parser_second = sub_parsers_a.add_parser("second")
29+
a_parser_second.add_argument("--flag", dest="a_par_second_flag", action="store_true", help="a parser second flag")
30+
a_parser_second.add_argument("--root", action="store_true", help="root flag")
31+
a_parser_second.add_argument("pos_one", help="first positional argument", metavar="one")
32+
a_parser_second.add_argument("pos_two", help="second positional argument", default="green")
33+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="prog")
8+
parser.add_argument("root")
9+
parser.add_argument("--root", action="store_true", help="root flag")
10+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_sub_title_prefix:
5+
6+
7+
.. sphinx_argparse_cli::
8+
:module: parser
9+
:func: make
10+
:group_title_prefix: myprog
11+
:group_sub_title_prefix:
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="complex")
8+
parser.add_argument("--root", action="store_true", help="root flag")
9+
parser.add_argument("--no-help", action="store_true")
10+
parser.add_argument("--outdir", "-o", type=str, help="output directory", metavar="out_dir")
11+
parser.add_argument("--in-dir", "-i", type=str, help="input directory", dest="in_dir")
12+
13+
group = parser.add_argument_group("Exclusive", description="this is an exclusive group")
14+
exclusive = group.add_mutually_exclusive_group()
15+
exclusive.add_argument("--foo", action="store_true", help="foo")
16+
exclusive.add_argument("--bar", action="store_true", help="bar")
17+
18+
parser.add_argument_group("empty")
19+
20+
sub_parsers_a = parser.add_subparsers(title="sub-parser-a", description="sub parsers A", dest="command")
21+
sub_parsers_a.required = False
22+
sub_parsers_a.default = "first"
23+
24+
a_parser_first = sub_parsers_a.add_parser("first", aliases=["f"], help="a-first-help", description="a-first-desc")
25+
a_parser_first.add_argument("--flag", dest="a_par_first_flag", action="store_true", help="a parser first flag")
26+
a_parser_first.add_argument("--root", action="store_true", help="root flag")
27+
a_parser_first.add_argument("pos_one", help="first positional argument", metavar="one")
28+
a_parser_first.add_argument("pos_two", help="second positional argument", default=1)
29+
30+
a_parser_second = sub_parsers_a.add_parser("second")
31+
a_parser_second.add_argument("--flag", dest="a_par_second_flag", action="store_true", help="a parser second flag")
32+
a_parser_second.add_argument("--root", action="store_true", help="root flag")
33+
a_parser_second.add_argument("pos_one", help="first positional argument", metavar="one")
34+
a_parser_second.add_argument("pos_two", help="second positional argument", default="green")
35+
36+
sub_parsers_a.add_parser("third") # empty sub-command
37+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_title_prefix:
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="prog")
8+
parser.add_argument("root")
9+
parser.add_argument("--root", action="store_true", help="root flag")
10+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_title_prefix: {prog}foo
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="bar")
8+
parser.add_argument("root")
9+
parser.add_argument("--root", action="store_true", help="root flag")
10+
11+
group = parser.add_argument_group("Exclusive", description="this is an exclusive group")
12+
exclusive = group.add_mutually_exclusive_group()
13+
exclusive.add_argument("--foo", action="store_true", help="foo")
14+
exclusive.add_argument("--bar", action="store_true", help="bar")
15+
16+
parser.add_argument_group("empty")
17+
18+
sub_parsers_a = parser.add_subparsers(title="sub-parser-a", description="sub parsers A", dest="command")
19+
sub_parsers_a.required = False
20+
sub_parsers_a.default = "first"
21+
22+
a_parser_first = sub_parsers_a.add_parser("first", aliases=["f"], help="a-first-help", description="a-first-desc")
23+
a_parser_first.add_argument("--flag", dest="a_par_first_flag", action="store_true", help="a parser first flag")
24+
a_parser_first.add_argument("--root", action="store_true", help="root flag")
25+
a_parser_first.add_argument("pos_one", help="first positional argument", metavar="one")
26+
a_parser_first.add_argument("pos_two", help="second positional argument", default=1)
27+
28+
a_parser_second = sub_parsers_a.add_parser("second")
29+
a_parser_second.add_argument("--flag", dest="a_par_second_flag", action="store_true", help="a parser second flag")
30+
a_parser_second.add_argument("--root", action="store_true", help="root flag")
31+
a_parser_second.add_argument("pos_one", help="first positional argument", metavar="one")
32+
a_parser_second.add_argument("pos_two", help="second positional argument", default="green")
33+
return parser
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import sys
4+
from pathlib import Path
5+
6+
sys.path.insert(0, str(Path(__file__).parent))
7+
extensions = ["sphinx_argparse_cli"]
8+
nitpicky = True
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.. sphinx_argparse_cli::
2+
:module: parser
3+
:func: make
4+
:group_sub_title_prefix: {prog}only{subcommand}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from __future__ import annotations
2+
3+
from argparse import ArgumentParser
4+
5+
6+
def make() -> ArgumentParser:
7+
parser = ArgumentParser(description="argparse tester", prog="bar")
8+
parser.add_argument("root")
9+
parser.add_argument("--root", action="store_true", help="root flag")
10+
11+
group = parser.add_argument_group("Exclusive", description="this is an exclusive group")
12+
exclusive = group.add_mutually_exclusive_group()
13+
exclusive.add_argument("--foo", action="store_true", help="foo")
14+
exclusive.add_argument("--bar", action="store_true", help="bar")
15+
16+
parser.add_argument_group("empty")
17+
18+
sub_parsers_a = parser.add_subparsers(title="sub-parser-a", description="sub parsers A", dest="command")
19+
sub_parsers_a.required = False
20+
sub_parsers_a.default = "first"
21+
22+
a_parser_first = sub_parsers_a.add_parser("first", aliases=["f"], help="a-first-help", description="a-first-desc")
23+
a_parser_first.add_argument("--flag", dest="a_par_first_flag", action="store_true", help="a parser first flag")
24+
a_parser_first.add_argument("--root", action="store_true", help="root flag")
25+
a_parser_first.add_argument("pos_one", help="first positional argument", metavar="one")
26+
a_parser_first.add_argument("pos_two", help="second positional argument", default=1)
27+
28+
a_parser_second = sub_parsers_a.add_parser("second")
29+
a_parser_second.add_argument("--flag", dest="a_par_second_flag", action="store_true", help="a parser second flag")
30+
a_parser_second.add_argument("--root", action="store_true", help="root flag")
31+
a_parser_second.add_argument("pos_one", help="first positional argument", metavar="one")
32+
a_parser_second.add_argument("pos_two", help="second positional argument", default="green")
33+
return parser

0 commit comments

Comments
 (0)