SubcommandParser
Mojo struct 🡭
SubcommandParser
@memory_only
struct SubcommandParserSubcommands 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())
var parsed = cmd_and_opts.value()
var parsed_cmd = parsed[0]
var opts = parsed[1].copy()
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)Aliases
__del__is_trivial = String.__del__is_trivial if String.__del__is_trivial if Dict[String, Subcommand].__del__is_trivial else Dict[String, Subcommand].__del__is_trivial else String.__del__is_trivial if Dict[String, Subcommand].__del__is_trivial else Dict[String, Subcommand].__del__is_trivial__moveinit__is_trivial = String.__moveinit__is_trivial if String.__moveinit__is_trivial if Dict[String, Subcommand].__moveinit__is_trivial else Dict[String, Subcommand].__moveinit__is_trivial else String.__moveinit__is_trivial if Dict[String, Subcommand].__moveinit__is_trivial else Dict[String, Subcommand].__moveinit__is_trivial__copyinit__is_trivial = String.__copyinit__is_trivial if String.__copyinit__is_trivial if Dict[String, Subcommand].__copyinit__is_trivial else Dict[String, Subcommand].__copyinit__is_trivial else String.__copyinit__is_trivial if Dict[String, Subcommand].__copyinit__is_trivial else Dict[String, Subcommand].__copyinit__is_trivial
Fields
- commands (
Dict[String, Subcommand]) - description (
String) - name (
String)
Implemented traits
AnyType, Copyable, 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: