import argparse
def command_d(value):
print("d", value)
def command_a(value_a, value_b):
print("a", value_a, value_b)
def command_r(value_a, value_b):
print("r", value_a, value_b)
def make_custom_action(command):
class CustomAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
return command(*values)
return CustomAction
def init_parser():
"""Initiate argparse and return an `argparse.ArgumentParser`
Returns: An `ArgumentParser`
"""
parser = argparse.ArgumentParser()
parser.add_argument(
'--remove-duplicates', '-d',
nargs=1,
action=make_custom_action(command_d)
)
parser.add_argument(
'--use-absolute-paths', '-A',
nargs=2,
action=make_custom_action(command_a)
)
parser.add_argument(
'--use-relative-paths', '-R',
nargs=2,
action=make_custom_action(command_r)
)
return parser
init_parser().parse_args(['-A', 'foo', 'bar'])
init_parser().parse_args(['-R', 'foo', 'bar'])
init_parser().parse_args(['-d', 'baz'])
aW1wb3J0IGFyZ3BhcnNlCgoKZGVmIGNvbW1hbmRfZCh2YWx1ZSk6CiAgICBwcmludCgiZCIsIHZhbHVlKQoKZGVmIGNvbW1hbmRfYSh2YWx1ZV9hLCB2YWx1ZV9iKToKICAgIHByaW50KCJhIiwgdmFsdWVfYSwgdmFsdWVfYikKCmRlZiBjb21tYW5kX3IodmFsdWVfYSwgdmFsdWVfYik6CiAgICBwcmludCgiciIsIHZhbHVlX2EsIHZhbHVlX2IpCgoKZGVmIG1ha2VfY3VzdG9tX2FjdGlvbihjb21tYW5kKToKICAgIGNsYXNzIEN1c3RvbUFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgogICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgogICAgICAgICAgICByZXR1cm4gY29tbWFuZCgqdmFsdWVzKQogICAgcmV0dXJuIEN1c3RvbUFjdGlvbgoKCgpkZWYgaW5pdF9wYXJzZXIoKToKICAgICIiIkluaXRpYXRlIGFyZ3BhcnNlIGFuZCByZXR1cm4gYW4gYGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyYAogICAgUmV0dXJuczogQW4gYEFyZ3VtZW50UGFyc2VyYAogICAgIiIiCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tcmVtb3ZlLWR1cGxpY2F0ZXMnLCAnLWQnLAogICAgICBuYXJncz0xLAogICAgICBhY3Rpb249bWFrZV9jdXN0b21fYWN0aW9uKGNvbW1hbmRfZCkKICAgICkKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLS11c2UtYWJzb2x1dGUtcGF0aHMnLCAnLUEnLAogICAgICBuYXJncz0yLAogICAgICBhY3Rpb249bWFrZV9jdXN0b21fYWN0aW9uKGNvbW1hbmRfYSkKICAgICkKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLS11c2UtcmVsYXRpdmUtcGF0aHMnLCAnLVInLAogICAgICBuYXJncz0yLAogICAgICBhY3Rpb249bWFrZV9jdXN0b21fYWN0aW9uKGNvbW1hbmRfcikKICAgICkKCiAgICByZXR1cm4gcGFyc2VyCgppbml0X3BhcnNlcigpLnBhcnNlX2FyZ3MoWyctQScsICdmb28nLCAnYmFyJ10pCmluaXRfcGFyc2VyKCkucGFyc2VfYXJncyhbJy1SJywgJ2ZvbycsICdiYXInXSkKaW5pdF9wYXJzZXIoKS5wYXJzZV9hcmdzKFsnLWQnLCAnYmF6J10pCg==