Esempio n. 1
0
    def call_sub(self, name, args="", silent=False):
        """call() equivalent which supports subcommands"""
        names = name.split(" ")
        command = self.application.get_command(names[0])
        for name in names[1:]:
            command = command.get_sub_command(name)
        args = StringArgs(args)

        return command.run(args, silent and NullIO() or self.io)
Esempio n. 2
0
def test_parse_fail_if_too_many_arguments_with_missing_command_name(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1"))
    fmt = builder.format

    with pytest.raises(CannotParseArgsException):
        parser.parse(StringArgs("server foo bar"), fmt)
Esempio n. 3
0
def test_parse_fails_if_missing_required_argument(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1", Argument.REQUIRED))
    builder.add_argument(Argument("argument2", Argument.REQUIRED))
    fmt = builder.format

    with pytest.raises(CannotParseArgsException):
        parser.parse(StringArgs("server add foo"), fmt)
Esempio n. 4
0
    def call(self, name, args=None):  # type: (str, Optional[str]) -> int
        """
        Call another command.
        """
        if args is None:
            args = ""

        args = StringArgs(args)
        command = self.application.get_command(name)

        return command.run(args, self.io)
Esempio n. 5
0
def test_parse_option_stops_parsing_if_invalid_option_and_lenient(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    fmt = builder.format

    args = parser.parse(StringArgs("server add --foo bar"), fmt, True)

    assert {} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 6
0
def test_option_fails_if_invalid_option(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    fmt = builder.format

    with pytest.raises(NoSuchOptionException) as e:
        parser.parse(StringArgs("server add --foo"), fmt)

    assert 'The "--foo" option does not exist.' == str(e.value)
Esempio n. 7
0
def test_parse_multi_valued_arguments_ignores_missing_command_names(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("multi", Argument.MULTI_VALUED))
    fmt = builder.format

    args = parser.parse(StringArgs("server one two three"), fmt)

    assert {"multi": ["one", "two", "three"]} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 8
0
def test_parse_does_not_fail_if_too_many_arguments_and_lenient(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1"))
    fmt = builder.format

    args = parser.parse(StringArgs("server add foo bar"), fmt, True)

    assert {"argument1": "foo"} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 9
0
def test_parse_short_option_without_value(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_option(Option("option", "o"))
    fmt = builder.format

    args = parser.parse(StringArgs("server add -o"), fmt)

    assert {} == args.arguments(False)
    assert {"option": True} == args.options(False)
Esempio n. 10
0
def test_parse_short_option_with_value2(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_option(Option("option", "o", flags=Option.OPTIONAL_VALUE))
    fmt = builder.format

    args = parser.parse(StringArgs("server add -ofoo"), fmt)

    assert {} == args.arguments(False)
    assert {"option": "foo"} == args.options(False)
Esempio n. 11
0
def test_parse_ignores_missing_command_names(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server", ["server-alias"])
    add = CommandName("add", ["add-alias"])
    builder.add_command_names(server, add)
    fmt = builder.format

    args = parser.parse(StringArgs(""), fmt)

    assert [server, add] == args.command_names
    assert {} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 12
0
def test_parse_option_up_to_invalid_option_if_lenient(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument"))
    fmt = builder.format

    args = parser.parse(StringArgs("server add bar --foo"), fmt, True)

    assert {"argument": "bar"} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 13
0
def test_parse_command_names(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    fmt = builder.format

    args = parser.parse(StringArgs("server add"), fmt)

    assert [server, add] == args.command_names
    assert {} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 14
0
def test_parse_short_option_fails_if_missing_value(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_option(Option("option", "o", flags=Option.REQUIRED_VALUE))
    fmt = builder.format

    with pytest.raises(CannotParseArgsException) as e:
        parser.parse(StringArgs("server add -o"), fmt)

    assert 'The "--option" option requires a value.' == str(e.value)
Esempio n. 15
0
def test_parse_does_not_fail_if_missing_required_argument_and_lenient(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1", Argument.REQUIRED))
    builder.add_argument(Argument("argument2", Argument.REQUIRED))
    fmt = builder.format

    args = parser.parse(StringArgs("server add foo"), fmt, True)

    assert {"argument1": "foo"} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 16
0
def test_parse_arguments_ignores_missing_command_name_aliases(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server", ["server-alias"])
    add = CommandName("add", ["add-alias"])
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1"))
    builder.add_argument(Argument("argument2"))
    fmt = builder.format

    args = parser.parse(StringArgs("server-alias foo bar"), fmt)

    assert {"argument1": "foo", "argument2": "bar"} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 17
0
def test_parse_arguments(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1"))
    builder.add_argument(Argument("argument2"))
    fmt = builder.format

    args = parser.parse(StringArgs("server add foo bar"), fmt)

    assert {"argument1": "foo", "argument2": "bar"} == args.arguments(False)
    assert {} == args.options(False)
Esempio n. 18
0
def test_run_with_keyboard_interrupt(
        config):  # type: (ApplicationConfig) -> None
    def callback(_, io):
        raise KeyboardInterrupt()

    config.create_command("interrupted").set_handler(CallbackHandler(callback))
    app = ConsoleApplication(config)

    output = BufferedOutputStream()
    error_output = BufferedOutputStream()

    assert 1 == app.run(StringArgs("interrupted"), StringInputStream(""),
                        output, error_output)

    assert "" == output.fetch()
    assert "" == error_output.fetch()
Esempio n. 19
0
    def handle(self):  # type: () -> int
        poetry_python_version = ".".join(str(s) for s in sys.version_info[:3])

        self.line("")
        self.line("<b>Poetry</b>")
        self.line(
            "\n".join(
                [
                    "<info>Version</info>: <comment>{}</>".format(self.poetry.VERSION),
                    "<info>Python</info>:  <comment>{}</>".format(
                        poetry_python_version
                    ),
                ]
            )
        )
        args = StringArgs("")
        command = self.application.get_command("env").get_sub_command("info")

        return command.run(args, self._io)
Esempio n. 20
0
def test_run_command(config, arg_string, config_callback):
    def callback(_, io):
        io.write(io.read_line())
        io.error(io.read_line())

        return 123

    config_callback(config, callback)

    args = StringArgs(arg_string)
    input = StringInputStream("line1\nline2")
    output = BufferedOutputStream()
    error_output = BufferedOutputStream()

    app = ConsoleApplication(config)

    assert 123 == app.run(args, input, output, error_output)
    assert "line1\n" == output.fetch()
    assert "line2" == error_output.fetch()
Esempio n. 21
0
def test_create(string, tokens):
    args = StringArgs(string)

    assert tokens == args.tokens