def test_inputs_AttrParserArgs_type_default(): SC = attr.make_class("SC", {"x": attr.ib()}) attr_parser_type = AttrParserArgs(attr.fields(SC).x).type assert type(attr_parser_type) is functools.partial assert attr_parser_type.func == AttrParserArgs.value_from_str assert attr_parser_type.args == () assert attr_parser_type.keywords == dict(v_type=attr.fields(SC).x.type)
def test_attr_parser_args_action_specified(): SC = attr.make_class( "SC", { "x": attr.ib(default=None, metadata={METADATA_ARGPARSER: dict(action='someaction')}) }) assert AttrParserArgs(attr.fields(SC).x).action == 'someaction'
def test_ParserFiller_fill_parser_with_no_metadata_argparser(): parser = argparse.ArgumentParser() SC = attr.make_class("SC", {"y": attr.ib(default=123, type=int)}) ParserFiller.fill_parser(SC, parser) with pytest.raises(SystemExit) as excinfo: parser.parse_args(['--y', 'some-value']) assert excinfo.value.code == 2
def test_attr_parser_args_kwargs_keys_for_store_const(): SC = attr.make_class( "SC", { "x": attr.ib(type=int, metadata={METADATA_ARGPARSER: dict(action='store_const')}) }) assert set(AttrParserArgs(attr.fields(SC).x).kwargs.keys()) == set( ('action', 'metavar', 'default', 'help'))
def test_attr_parser_args_kwargs_keys_with_choices(): SC = attr.make_class( "SC", { "x": attr.ib(type=str, default='123', metadata={METADATA_ARGPARSER: dict(choices='somechoices')}) }) assert set(AttrParserArgs(attr.fields(SC).x).kwargs.keys()) == set( ('action', 'metavar', 'default', 'help', 'type', 'choices'))
def test_attr_parser_args_const_from_metadata_for_optional(): SC = attr.make_class( "SC", { "x": attr.ib(type=str, metadata={ METADATA_ARGPARSER: { 'const': 'someconst' }, }) }) assert AttrParserArgs(attr.fields(SC).x).const == 'someconst'
def test_ParserFiller_extract_positional_args_default_is_not_NOTHING(): SC = attr.make_class( "SC", { "x": attr.ib(default=123, metadata={METADATA_ARGPARSER: { 'help': 'some help' }}, type=int) }) ret = ParserFiller.extract_positional_args(SC, attr.fields_dict(SC)) assert ret == ([], attr.fields_dict(SC))
def test_inputs_AttrParserArgs_help_from_metadata_for_optional(): SC = attr.make_class( "SC", { "x": attr.ib(type=str, metadata={ METADATA_ARGPARSER: { 'help': 'some help' }, }) }) assert AttrParserArgs(attr.fields(SC).x).help == 'some help'
def test_inputs_AttrParserArgs_metavar_from_metadata_for_optional(): SC = attr.make_class( "SC", { "x": attr.ib(type=str, metadata={ METADATA_ARGPARSER: { 'metavar': 'SOME-METAVAR' }, }, default='123') }) assert AttrParserArgs(attr.fields(SC).x).metavar == 'SOME-METAVAR'
def test_ParserFiller_fill_parser_with_no_action_in_metadata(): parser = argparse.ArgumentParser() SC = attr.make_class( "SC", { "y": attr.ib(default=123, metadata={METADATA_ARGPARSER: { 'help': 'some help' }}, type=int) }) ParserFiller.fill_parser(SC, parser) args = parser.parse_args(['--y', 'some-value']) assert args.y == 'some-value'
def test_ParserFiller_extract_positional_args_happy_path(): SC = attr.make_class( "SC", { "x": attr.ib(metadata={ METADATA_ARGPARSER: { 'action': 'store_bool', 'help': 'some help' } }, type=int) }) ret = ParserFiller.extract_positional_args(SC, attr.fields_dict(SC)) assert ret == ([attr.fields(SC).x], {})
def test_inputs_AttrParserArgs_type_custom(): def some_fun(value): pass SC = attr.make_class( "SC", { "x": attr.ib(type=str, metadata={ METADATA_ARGPARSER: { 'type': some_fun }, }, default='123') }) assert AttrParserArgs(attr.fields(SC).x).type == some_fun
def test_inputs_copy_attr_verify_attrs(): some_cls = attr.make_class( "some_cls", { "some_attr": attr.ib(default=123, validator=None, metadata={'metadata_key': 1}, repr=False, hash=None, init=True, type=str, converter=None, kw_only=True) }) read_attr = attr.fields(some_cls).some_attr copied_attr = inputs.copy_attr(read_attr) assert copied_attr == read_attr
def test_ParserFiller_fill_parser_when_action_is_store_bool(): parser = argparse.ArgumentParser() SC = attr.make_class( "SC", { "y": attr.ib(default=123, metadata={ METADATA_ARGPARSER: { 'action': 'store_bool', 'help': 'some help' } }, type=int) }) ParserFiller.fill_parser(SC, parser) args = parser.parse_args(['--y', '--noy']) assert not args.y args = parser.parse_args(['--y']) assert args.y args = parser.parse_args(['--noy']) assert not args.y
def test_ParserFiller_extract_positional_args_no_metadata_argparser(): SC = attr.make_class("SC", {"x": attr.ib(type=int, repr=False, init=False)}) ret = ParserFiller.extract_positional_args(SC, attr.fields_dict(SC)) assert ret == ([], attr.fields_dict(SC))
def test_inputs_AttrParserArgs_kwargs_keys_by_default(): SC = attr.make_class("SC", {"x": attr.ib(type=str, default='123')}) assert set(AttrParserArgs(attr.fields(SC).x).kwargs.keys()) == set( ('action', 'metavar', 'default', 'help', 'type'))
def test_attr_parser_args_name_for_optional(): SC = attr.make_class("SC", {"x": attr.ib(default=None)}) assert AttrParserArgs(attr.fields(SC).x).name == '--x'
def test_inputs_AttrParserArgs_default_not_set(): SC = attr.make_class("SC", {"x": attr.ib()}) assert AttrParserArgs(attr.fields(SC).x).name == 'x' assert AttrParserArgs(attr.fields(SC).x).default is None
def test_inputs_AttrParserArgs_name_for_optional_with_underscore(): SC = attr.make_class("SC", {"x_y": attr.ib(default=None)}) assert AttrParserArgs(attr.fields(SC).x_y).name == '--x-y'
def test_inputs_AttrParserArgs_action_by_default(): SC = attr.make_class("SC", {"x": attr.ib(default=None)}) assert AttrParserArgs(attr.fields(SC).x).action == 'store'
def test_inputs_AttrParserArgs_help_by_default_for_optional(): SC = attr.make_class("SC", {"x": attr.ib(type=str, default='123')}) assert AttrParserArgs(attr.fields(SC).x).help == ''
def test_attr_parser_args_kwargs_keys_for_boolean(): SC = attr.make_class("SC", {"x": attr.ib(type=bool, default=False)}) assert set(AttrParserArgs(attr.fields(SC).x).kwargs.keys()) == set( ('action', 'help'))
def test_inputs_AttrParserArgs_no_metavar_for_positional(): SC = attr.make_class("SC", {"x": attr.ib()}) assert AttrParserArgs(attr.fields(SC).x).metavar is None
def test_inputs_AttrParserArgs_action_for_boolean(): SC = attr.make_class("SC", {"x": attr.ib(default=None, type=bool)}) assert AttrParserArgs(attr.fields(SC).x).action == 'store_true'
def test_inputs_AttrParserArgs_name_for_positional(): SC = attr.make_class("SC", {"x": attr.ib()}) assert AttrParserArgs(attr.fields(SC).x).name == 'x'
def test_attr_parser_args_default_set(): SC = attr.make_class("SC", {"x": attr.ib(default=123)}) assert AttrParserArgs(attr.fields(SC).x).name == '--x' assert AttrParserArgs(attr.fields(SC).x).default == 123