cli
SubcommandParser

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: