import argparse DEFAULTS = {'debug': False, } def get_parser(description, arguments, defaults): """ :param description: Program description :param arguments: List of well known arguments in use :param defaults: Default values :return: ArgumentParser :rtype: argparse.ArgumentParser """ parser = argparse.ArgumentParser(description = description, add_help = True, formatter_class = argparse.ArgumentDefaultsHelpFormatter, ) for this in arguments: if this == 'debug': parser.add_argument('--debug', dest='debug', action='store_true', default=defaults.get(this, DEFAULTS.get(this)), help='Enable debug operation' ) elif this == 'dirs': parser.add_argument('--dirs', dest = 'dirs', default = None, nargs = '*', help = 'Find hosts based on cosmos host directorys ending with SUFFIX', metavar = 'SUFFIX', ) elif this == 'outfile': parser.add_argument('--outfile', dest = 'outfile', default = None, help = 'Output filename (to not print to stdout)', metavar = 'FILENAME', ) elif this == 'hostsfile': parser.add_argument('--hostsfile', dest = 'hostsfile', default = None, help = 'Input hosts YAML file', metavar = 'FILENAME', ) elif this == 'addfile': parser.add_argument('--addfile', dest = 'addfile', default = None, help = 'Add contents of this YAML file to the output', metavar = 'FILENAME', ) elif this == 'classesfile': parser.add_argument('--classesfile', dest='classesfile', default=None, help='Input classes YAML file (cosmos-rules.yaml)', metavar='FILENAME', ) else: raise ValueError('Unknown argument: {}'.format(this)) return parser