#!/usr/bin/env python3 # coding: utf8 """. Author: {developer} <{mail}> {date} Licence: GNU AGPL v3: http://www.gnu.org/licenses/ This file is part of [``]() """ import argparse import sys from pprint import pprint as pp class CustomFormatter( argparse.RawDescriptionHelpFormatter, argparse.ArgumentDefaultsHelpFormatter ): """This convert file docstring into help text.""" pass # pylint: disable=W0107 def parse_args(args=sys.argv[1:]): # pylint: disable=W0102 """Argument parser. Put values & describe parameters here not in your code Ease usage with help & docs """ parser = argparse.ArgumentParser( description=sys.modules[__name__].__doc__, formatter_class=CustomFormatter ) group = parser.add_argument_group("foobar settings") group.add_argument( "-d", "--debug", action="store_true", default=False, help="Log activity in console", ) group.add_argument( "-f", "--foo", action="store_true", default=False, dest="foo", help="Using foo", ) group.add_argument( "-b", "--bar", help="Using bar", metavar="BAR", nargs="?", type=str, ) if len(sys.argv) == 1: parser.print_help(sys.stderr) sys.exit(1) return parser.parse_args(args) def i_am_bar(option): """Print a variable string. Add some doctests to ensure this is doing what you expects: :Tests: >>> i_am_bar("FOOBAR") 'I am FOOBAR' >>> i_am_bar() Traceback (most recent call last): ... TypeError: i_am_bar() missing 1 required positional argument: 'option' """ return f"I am {str(option)}" def i_am_foo(): """Print a constant string. Add some doctests to ensure this is doing what you expects: :Tests: >>> i_am_foo() 'I am foo' >>> i_am_foo("FOO") Traceback (most recent call last): ... TypeError: i_am_foo() takes 0 positional arguments but 1 was given """ return "I am foo" def main(): """CLI function, options passed as arguments. Add some doctests to ensure this is doing what you expects: :Tests: >>> var = 1 >>> var + 1 2 """ pargs = parse_args() if pargs.foo: pp(i_am_foo()) elif pargs.bar: pp(i_am_bar(pargs.bar)) if pargs.debug and pargs: pp(pargs) if __name__ == "__main__": import doctest doctest.testmod() sys.exit(main())