Exemplo n.º 1
0
    def test_turned_off_arguments_arent_gathered_from_command_line() -> None:
        fields_data = [
            FieldFactory(name="name", value=Argument(cli_names=False))
        ]
        cli_args = ["--name", "abcd"]

        with patch_cli_args(cli_args), pytest.raises(SystemExit):
            get_cmd_line_args(fields_data)
Exemplo n.º 2
0
    def test_all_arg_names_can_be_provided_from_cli(
            cli_args: List[str]) -> None:
        class Args(RocketBase):
            arg: str = Argument(cli_names=["-a", "--arg"])

        with patch_cli_args(cli_args):
            output_args = Args.parse_args()

        assert output_args.arg == "value"
Exemplo n.º 3
0
    def test_non_existent_arguments_raise_exception_with_informational_message(
    ) -> None:
        fields_data = []
        cli_args = ["--arg-1", "abcd", "--arg-2", "1234", "--arg-3", "12.34"]

        with patch_cli_args(cli_args), pytest.raises(SystemExit) as exception:
            get_cmd_line_args(fields_data)

        for arg in cli_args:
            assert arg in str(exception.value)
Exemplo n.º 4
0
    def test_type_is_correctly_parsed(type_hint: Any, raw_arg: str,
                                      parsed_arg: Any) -> None:
        class Args(RocketBase):
            name: type_hint

        cli_args = ["--name", raw_arg]

        with patch_cli_args(cli_args):
            args = Args.parse_args()

        assert args.name == parsed_arg
Exemplo n.º 5
0
    def test_help_message_contains_arguments_metadata(
            cli_args: List[str]) -> None:
        class Args(RocketBase):
            arg_1: str
            arg_2: str

        with patch_cli_args(cli_args), pytest.raises(SystemExit) as exception:
            Args.parse_args()

        message = str(exception.value)
        for name in ["--arg-1", "ARG_1", "--arg-2", "ARG_2"]:
            assert name in message
Exemplo n.º 6
0
    def test_not_provided_required_arguments_display_appropriate_message(
            capsys: CaptureFixture) -> None:
        class Args(RocketBase):
            arg_1: str
            arg_2: str

        with patch_cli_args([]), pytest.raises(SystemExit) as exception:
            Args.parse_args()

        message = str(exception.value)
        assert "--arg-1" in message
        assert "--arg-2" in message
Exemplo n.º 7
0
    def test_env_vars_names_can_be_customized() -> None:
        class Args(RocketBase):
            arg_int: int = Argument(env_name="MY_ARG_INT")
            arg_float: float = Argument(env_name="MY_ARG_FLOAT")
            arg_str: str = Argument(env_name="MY_ARG_STR")

        with patch_cli_args([]), patch_env_args(MY_ARG_INT="1234",
                                                MY_ARG_FLOAT="12.34",
                                                MY_ARG_STR="abcd"):
            args = Args.parse_args()

        assert args.arg_int == 1234
        assert args.arg_float == 12.34
        assert args.arg_str == "abcd"
Exemplo n.º 8
0
    def test_provided_env_vars_return_appropriate_values() -> None:
        class Args(RocketBase):
            arg_int: int
            arg_float: float
            arg_str: str

        with patch_cli_args([]), patch_env_args(ARG_INT="1234",
                                                ARG_FLOAT="12.34",
                                                ARG_STR="abcd"):
            args = Args.parse_args()

        assert args.arg_int == 1234
        assert args.arg_float == 12.34
        assert args.arg_str == "abcd"
Exemplo n.º 9
0
    def test_env_arguments_are_turned_off() -> None:
        class Args(RocketBase):
            arg_int: int = Argument(env_name=False, default=1234)
            arg_str: str = Argument(env_name=False, default="abcd")
            arg_float: float = Argument(env_name=False, default=12.34)

        with patch_cli_args([]), patch_env_args(ARG_INT="5678",
                                                ARG_STR="efgh",
                                                ARG_FLOAT="56.78"):
            output_args = Args.parse_args()

        assert output_args.arg_int == 1234
        assert output_args.arg_str == "abcd"
        assert output_args.arg_float == 12.34
Exemplo n.º 10
0
    def test_provided_arguments_are_correctly_parsed() -> None:
        fields_data = [
            Field(name="name_1", type=str, value=Argument(cli_names=True)),
            Field(name="name_2", type=int,
                  value=Argument(cli_names=["--arg"])),
            Field(name="name_3", type=float, value=Argument(cli_names=["-a"])),
        ]
        cli_args = ["--name-1", "abcd", "--arg", "1234", "-a", "12.34"]

        with patch_cli_args(cli_args):
            parsed_args = get_cmd_line_args(fields_data)

        expected_args = {"name_1": "abcd", "name_2": "1234", "name_3": "12.34"}
        assert parsed_args == expected_args
Exemplo n.º 11
0
    def test_cli_arguments_are_turned_off() -> None:
        class Args(RocketBase):
            arg_int: int = Argument(cli_names=False)
            arg_str: str = Argument(cli_names=False)
            arg_float: float = Argument(cli_names=False)

        cli_args = [
            "--arg-int", "5678", "--arg-str", "efgh", "--arg-float", "56.78"
        ]

        with patch_cli_args(cli_args), pytest.raises(SystemExit) as message:
            Args.parse_args()

        occurrences = [arg in str(message.value) for arg in cli_args]
        assert all(occurrences)
Exemplo n.º 12
0
    def test_args_have_appropriate_priorities_first_cli_then_env_then_default(
    ) -> None:
        class Args(RocketBase):
            arg_1: str = "default_value"
            arg_2: str = "default_value"
            arg_3: str = "default_value"

        with patch_cli_args(["--arg-1",
                             "cli_value"]), patch_env_args(ARG_1="env_value",
                                                           ARG_2="env_value"):
            args = Args.parse_args()

        assert args.arg_1 == "cli_value"
        assert args.arg_2 == "env_value"
        assert args.arg_3 == "default_value"
Exemplo n.º 13
0
    def test_not_provided_required_arguments_display_appropriate_message(
    ) -> None:
        class Args(RocketBase):
            arg_1: str = Argument(
                cli_names=["-a1", "--arg-1", "----long-arg-1"])
            arg_2: str = Argument(
                cli_names=["-a2", "--arg-2", "----long-arg-2"])

        with patch_cli_args([]), pytest.raises(SystemExit) as exception:
            Args.parse_args()

        message = str(exception.value)

        for argument in [Args.arg_1, Args.arg_2]:
            for name in argument.cli_names:
                assert name in message
Exemplo n.º 14
0
    def test_provided_arguments_return_appropriate_values() -> None:
        class Args(RocketBase):
            arg_int: int
            arg_str: str
            arg_float: float

        cli_args = [
            "--arg-int", "123", "--arg-str", "abc", "--arg-float", "123.456"
        ]

        with patch_cli_args(cli_args):
            output_args = Args.parse_args()

        assert output_args.arg_int == 123
        assert output_args.arg_str == "abc"
        assert output_args.arg_float == 123.456
Exemplo n.º 15
0
    def test_help_message_contains_arguments_metadata(
            cli_args: List[str]) -> None:
        class Args(RocketBase):
            arg_1: str = Argument(cli_names=["-a1", "--my-arg-1"],
                                  env_name="MY_ARG_1",
                                  help="First argument.")
            arg_2: str = Argument(cli_names=["-a2", "--my-arg-2"],
                                  env_name="MY_ARG_2",
                                  help="Second argument.")

        with patch_cli_args(cli_args), pytest.raises(SystemExit) as exception:
            Args.parse_args()

        message = str(exception.value)

        for argument in [Args.arg_1, Args.arg_2]:
            for name in argument.cli_names:
                assert name in message

            assert argument.env_name in message
            assert argument.help in message