CLInspector is a library to introspect Python CLI applications and extract their command structure and parameters programmatically.
The main entry point is the get_cmd_info()
function which analyzes a CLI application instance and returns a structured CommandInfo
object:
from clinspector import get_cmd_info
command_info = get_cmd_info(cli_instance)
The function accepts CLI application instances from the following frameworks:
- Typer -
typer.Typer
instances - Click -
click.Group
instances - Cleo -
cleo.Application
instances - Cappa - Classes decorated with
@cappa.command
- argparse -
ArgumentParser
instances
The extracted information is returned as a CommandInfo
object containing:
name: str
- Name of the commanddescription: str
- Description/help textusage: str
- Formatted usage stringsubcommands: dict[str, CommandInfo]
- Nested subcommandsdeprecated: bool
- Whether command is marked as deprecatedepilog: str | None
- Optional epilog texthidden: bool
- Whether command is hiddenparams: list[Param]
- List of command parameters
name: str
- Parameter namehelp: str | None
- Help textdefault: Any
- Default valueopts: list[str]
- Parameter options (e.g.["-f", "--flag"]
)required: bool
- Whether parameter is requiredis_flag: bool
- Whether parameter is a flagmultiple: bool
- Whether parameter accepts multiple valuesnargs: int | str | None
- Number of arguments acceptedenvvar: str | None
- Environment variable namehidden: bool
- Whether parameter is hiddenparam_type_name: Literal["option", "parameter", "argument"]
- Parameter typetype: dict[str, str] | None
- Parameter type informationmetavar: str | None
- Display name in help text
You can access subcommands using dictionary syntax:
# Get info for "build" subcommand
build_info = command_info["build"]
# Access nested subcommand
nested_info = command_info["group"]["subcommand"]
The extracted information allows you to:
- Generate documentation automatically
- Build command completion
- Create wrappers and adapters
- Perform static analysis of CLI interfaces
- And more!
Example output for a click command:
```python
CommandInfo(
name="cli",
description="Example CLI tool",
usage="cli [OPTIONS] COMMAND [ARGS]...",
params=[
Param(name="verbose", help="Enable verbose output", opts=["-v", "--verbose"])
],
subcommands={
"build": CommandInfo(
name="build",
description="Build the project",
params=[...]
)
}
)