CLI Manifest Schema¶
This document describes the schema for the CLI manifest.
CLIManifest¶
The CLIManifest
model defines the structure of a CLI manifest file. It includes fields for the CLI's name, version, dependencies, commands, and other configuration options.
Fields¶
manifestVersion
: The version of the manifest schema.name
: The name of the CLI, used when invoking from the command line.version
: The CLI version.help
: A brief description of the CLI.requires
: A list of Python package dependencies for the CLI. Supports requirements specifier syntax.includes
: A list of external CLI manifests to include. Performs a deep merge of manifests sequentially in the order given to assemble a merged manifest, and finally, deep merges the merged manifest with this manifest.vars
: A mapping defining manifest variables that can be referenced in any other blocks. Environments variables can be used in this section with${some_env_var}
for dynamic parsing. Supports jinja2 formatted expressions as values. Interpolate defined vars in other blocks jinja2-styled{{ var_name }}
.imports
: A string block or list of strings containing any module imports. These can be used to import any python modules that the CLI depends on.functions
: A string block or list of helper function definitions. These functions should be defined as strings that can be executed by the Python interpreter.types
: A mapping containing any shared type definitions. These types can be referenced by name in the args section to provide type annotations for params and options defined in the args section.global_params
: Parameters applied to all commands.command_templates
: Reusable command templates.commands
: A mapping containing the command definitions for the CLI. Each command should have a unique key- which can be either a group command or nested subcommands. Nested subcommands are joined by '.' in between each level. Aliases for commands can be separated in the key by '|'. A special '(*)' wildcard can be used to spread the subcommand to all group-level commands.cli_options
: Additional CLI configuration options.tests
: Test cases for commands.
Command¶
The Command
model defines a single command within the CLI. It specifies the command's execution logic, arguments, and configuration.
Fields¶
run
: The command's execution logic, defined as aRunBlock
. Can be a single command or a list of commands.help
: A description of the command.args
: A list of arguments for the command. Each argument can be:- A
SimpleCommandParam
:{'name': 'str = "tester"'}
structure - A
CommandParam
: Full argument specification - A string: Type annotation string
- A
template
: A reference to a command template.pre_run
: APreRunBlock
to execute before the command.post_run
: APostRunBlock
to execute after the command.aliases
: A list of aliases for the command.name
: The name of the command.config
: An optionalCommandConfig
object.
CommandParam¶
The CommandParam
model defines the structure of a command parameter.
Fields¶
name
: The name of the parameter. Options must be prefixed with--
.type
: The type of the argument (e.g.,str
,int
,bool
).default
: The default value.help
: Description of the argument.short
: Short alias (only valid when name is prefixed with--
as an option/flag).required
: Whether the argument is required.
RunBlock Types¶
Commands now use specialized blocks for execution:
RunBlock
: Main command execution blockPreRunBlock
: Pre-execution hookPostRunBlock
: Post-execution hookRunBlockList
: List of execution blocks
Example
CommandConfig¶
The CommandConfig
model provides additional configuration options for a command.
Fields¶
These directly correlate with params accepted by Typer @app.command()
context_settings
: Additional context settings for the command.epilog
: Text to display after the help message.short_help
: A short description of the command.options_metavar
: The metavar to use for options in the help message.add_help_option
: Whether to add a help option to the command.no_args_is_help
: Whether to display the help message if no arguments are provided.hidden
: Whether to hide the command from the help message.deprecated
: Whether the command is deprecated.rich_help_panel
: An optional panel name for rich help output.
For a deeper dive, check out the manifest.py.