1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
# CLI reference
```python exec="true" idprefix="cli-" id="cli-reference"
import argparse
import sys
from griffe import get_parser
parser = get_parser()
def render_parser(parser: argparse.ArgumentParser, title: str, heading_level: int = 2) -> str:
"""Render the parser help documents as a string."""
result = [f"{'#' * heading_level} {title}\n"]
if parser.description and title != "pdm":
result.append("> " + parser.description + "\n")
for group in sorted(parser._action_groups, key=lambda g: g.title.lower(), reverse=True):
if not any(
bool(action.option_strings or action.dest) or isinstance(action, argparse._SubParsersAction)
for action in group._group_actions
):
continue
result.append(f"{group.title.title()}:\n")
for action in group._group_actions:
if isinstance(action, argparse._SubParsersAction):
for name, subparser in action._name_parser_map.items():
result.append(render_parser(subparser, name, heading_level + 1))
continue
opts = [f"`{opt}`" for opt in action.option_strings]
if not opts:
line = f"- `{action.dest}`"
else:
line = f"- {', '.join(opts)}"
if action.metavar:
line += f" `{action.metavar}`"
line += f": {action.help}"
if action.default and action.default != argparse.SUPPRESS:
if action.default is sys.stdout:
default = "sys.stdout"
else:
default = str(action.default)
line += f" Default: `{default}`."
result.append(line)
result.append("")
return "\n".join(result)
print(render_parser(parser, "griffe"))
```
|