SubcommandParser
Mojo struct 🡭
SubcommandParser
@memory_only
struct SubcommandParser
Subcommands are created by passing in the command, and an OptParser
.
The parser is for the options for the subcommand.
from testing import assert_equal, assert_true
from extramojo.cli.parser import OptParser, OptConfig, OptKind, SubcommandParser, Subcommand
var args = List(String("do-work"), String("--file"), String("/path/to/thing"), String("--count"), String("42"), String("--fraction"), String("-0.2"), String("--verbose"))
var program_name = "example"
var parser = OptParser(name="do-work", description="An example program.")
parser.add_opt(OptConfig("file", OptKind.StringLike, default_value=None, description="A file with something in it."))
parser.add_opt(OptConfig("count", OptKind.IntLike, default_value=String("100"), description="A number."))
parser.add_opt(OptConfig("fraction", OptKind.FloatLike, default_value=String("0.5"), description="Some interesting fraction to keep."))
# Note that with flags, the OptKind must be BoolLike and there must be a default_value specified.
parser.add_opt(OptConfig("verbose", OptKind.BoolLike, is_flag=True, default_value=String("False"), description="Turn up the logging."))
var cmd = Subcommand(parser) # uses the name from the passed in parser
var cmd_parser = SubcommandParser(name=String("cool-program"), description="Do some cool stuff.")
cmd_parser.add_command(cmd)
# Note, a user would call parser.parse_sys_args()
var cmd_and_opts = cmd_parser.parse_args(args)
if not cmd_and_opts:
print(cmd_parser.get_help_message())
parsed_cmd, opts = cmd_and_opts.value()
if parsed_cmd == cmd.parser.program_name:
assert_equal(opts.get_string("file"), String("/path/to/thing"))
assert_equal(opts.get_int("count"), 42)
assert_equal(opts.get_float("fraction"), -0.2)
assert_equal(opts.get_bool("verbose"), True)
assert_true(len(opts.get_help_message()[]) > 0)
Fields
- commands (
Dict[String, Subcommand]
) - description (
String
) - name (
String
)
Implemented traits
AnyType
, Copyable
, ExplicitlyCopyable
, Movable
, UnknownDestructibility
Methods
➕ ➖__init__
fn __init__(out self, *, var name: String, var description: String = "")
Details
Args:
- name (
String
) - description (
String
) - self (
Self
)
Returns:
Self
get_help_message
fn get_help_message(self) -> String
Create the help message for the subcommands.
Args:
- self (
Self
)
Returns:
String
Raises:
add_command
fn add_command(mut self, command: Subcommand)
Add a subcommand.
Args:
- self (
Self
) - command (
Subcommand
)
parse_args
fn parse_args(self, args: List[String]) -> Optional[Tuple[String, ParsedOpts]]
Parse the input args, expecting a subcommand.
Args:
- self (
Self
) - args (
List
)
Returns:
Optional
Raises:
parse_sys_args
fn parse_sys_args(self) -> Optional[Tuple[String, ParsedOpts]]
Parse the sys.argv() list.
Args:
- self (
Self
)
Returns:
Optional
Raises: