def test_multiple_args(): mappings = { 'first_arg': { 'type': 'str', 'description': 'Some fancy description', 'cli_arg': '--cli-option-name', 'env_var': 'ENV_VAR_NAME', 'default_value': 'first_default', 'required': True, }, 'second_arg': { 'type': 'tuple[int, bool, path]', 'description': 'Some fancy description', 'cli_arg': '--cli-option-name-for-tuple', 'env_var': 'ENV_VAR_NAME_TUPLE', 'default_value': '10 True .', 'required': False, } } toml_file = NamedTemporaryFile(mode='w', delete=False) try: toml.dump(mappings, toml_file) toml_file.close() parser = ArgumentsParser.from_files(toml_file.name, []) for i, mapping in enumerate(mappings.items()): name, mapp = mapping assert_argument_values(name, mapp, asdict(parser.arguments[i])) finally: os.unlink(toml_file.name)
def test_multiple_values(arguments_definition): cli = [ '--some-tuple', 'String Value', '123', 'Value', '--some-tuple', 'Another Value', '1410', 'Other Value', ] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['list_of_tuples'] == [[ 'String Value', 123, 'Value' ], ['Another Value', 1410, 'Other Value']]
def test_yaml(toml_file_path): values = { 'string_arg': 'some (not so) random string', 'int_arg': 123, 'int_arg_as_string': '123', 'path_arg': '.', 'list_arg': [123, 156, 1956], 'list_of_tuples_arg': [[123, 156], [12, 14], [145, 140]], } yaml_file = NamedTemporaryFile(mode='w', delete=False) try: yaml.dump(values, yaml_file) yaml_file.close() parser = ArgumentsParser.from_files(toml_file_path, [], yaml_config=yaml_file.name) assert parser.user_values == values finally: os.unlink(yaml_file.name)
def test_default_required(): mappings = { 'first_arg': { 'type': 'str', 'description': 'Some fancy description', 'cli_arg': '--cli-option-name', 'env_var': 'ENV_VAR_NAME', 'default_value': 'first_default', } } toml_file = NamedTemporaryFile(mode='w', delete=False) try: toml.dump(mappings, toml_file) toml_file.close() parser = ArgumentsParser.from_files(toml_file.name, []) mappings['first_arg']['required'] = False assert_argument_values('first_arg', mappings['first_arg'], asdict(parser.arguments[0])) finally: os.unlink(toml_file.name)
def test_getattr(toml_file_path): parser = ArgumentsParser.from_files(toml_file_path, ['--cli-option-name', 'value']) assert parser.first_arg == 'value'
def test_multiple_empty_values(arguments_definition): cli = [ '--list-element', '', '--list-element', '1410', '--list-element', '' ] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['list'] == ['', '1410', '']
def test_no_value(arguments_definition): cli = [] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['list'] is None
def test_no_cli_default_set_parsing(arguments_definition_int, default_value, expected_list): arguments_definition_int[0].default_value = default_value cli = [] parser = ArgumentsParser(arguments_definition_int, cli) assert parser.arguments_values['list'] == expected_list
def test_not_required_is_present(toml_file_path_not_required): parser = ArgumentsParser.from_files(toml_file_path_not_required, ['--cli-option-name', 'value']) assert parser.first_arg == 'value'
def test_no_cli_env_set(arguments_definition_with_env, env_var, env_value, expected_value): os.environ[env_var] = env_value cli = [] parser = ArgumentsParser(arguments_definition_with_env, cli) assert parser.arguments_values['path'] == expected_value
def test_switch_but_no_value(arguments_definition): cli = ['--some-integer'] with pytest.raises(SystemExit): ArgumentsParser(arguments_definition, cli)
def test_multiple_values(arguments_definition): cli = ['--some-integer', '123', '--some-integer', '1410'] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['integer'] == 1410
def test_single_value(arguments_definition): cli = ['--some-integer', '123'] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['integer'] == 123
def test_value_empty_string(arguments_definition): cli = ['--some-integer', ''] with pytest.raises(ValueError): ArgumentsParser(arguments_definition, cli)
def test_single_value_with_post_operations( arguments_definition_with_post_operations): cli = ['--some-integer', '3'] parser = ArgumentsParser(arguments_definition_with_post_operations, cli) assert parser.arguments_values['integer'] == 60
def test_multiple_values(arguments_definition): cli = ['--file-path', './LICENSE', '--file-path', './README.md'] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['path'] == Path('./README.md')
def test_no_cli_default_set(arguments_definition, default_value, expected_value): arguments_definition[0].default_value = default_value cli = [] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['path'] == expected_value
def test_value_not_parsable(arguments_definition): cli = ['--some-integer', '123_not'] with pytest.raises(ValueError): ArgumentsParser(arguments_definition, cli)
def test_is_required_not_present(toml_file_path_required): with pytest.raises(RuntimeError): ArgumentsParser.from_files(toml_file_path_required, [])
def test_no_cli_default_set_empty_string(arguments_definition): arguments_definition[0].default_value = '' cli = [] with pytest.raises(ValueError): ArgumentsParser(arguments_definition, cli)
def test_not_required_not_present(toml_file_path_not_required): parser = ArgumentsParser.from_files(toml_file_path_not_required, []) assert parser.first_arg is None
def test_no_cli_default_set(arguments_definition): arguments_definition[0].default_value = '123' cli = [] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['integer'] == 123
def test_no_cli_env_set_multiple_values(arguments_definition_int_with_env, env_var, env_value, expected_list): os.environ[env_var] = env_value cli = [] parser = ArgumentsParser(arguments_definition_int_with_env, cli) assert parser.arguments_values['list'] == expected_list
def test_no_cli_default_set_not_parsable(arguments_definition): arguments_definition[0].default_value = '123_not' cli = [] with pytest.raises(ValueError): ArgumentsParser(arguments_definition, cli)
def test_single_empty_value(arguments_definition): cli = ['--list-element', ''] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['list'] == ['']
def test_no_cli_env_set_empty_string(arguments_definition_with_env, env_var): os.environ[env_var] = '' cli = [] with pytest.raises(ValueError): ArgumentsParser(arguments_definition_with_env, cli)
def test_switch_but_no_value(arguments_definition): cli = ['--list-element'] with pytest.raises(SystemExit): ArgumentsParser(arguments_definition, cli)
def test_value_empty_string(arguments_definition): cli = ['--file-path', ''] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['path'] == Path('.')
def test_getattr_wrong_attr(toml_file_path): parser = ArgumentsParser.from_files(toml_file_path, ['--cli-option-name', 'value']) with pytest.raises(AttributeError) as exc: parser.not_existing_arg assert 'not_existing_arg' in str(exc)
def test_single_value(arguments_definition, cli_value, expected_value): cli = ['--file-path', cli_value] parser = ArgumentsParser(arguments_definition, cli) assert parser.arguments_values['path'] == expected_value