/sig2cli

Turn function signatures into Command Line Interfaces

Primary LanguagePythonMIT LicenseMIT

sig2cli

Turn function signatures into Command Line Interfaces

Just define a function signature as the entry point of your program instead of writing a lot of verbose argparse code.

Example

import sig2cli

def hi(name, times=1, enthusiast=False):
    """Say hi!
    Arguments
        name:       person to greet
        times:      how many times to greet
        enthusiast: add an exclamation mark
    """
    for _ in range(times):
        print('Hi {}{}'.format(name, '!' if enthusiast else ''))

if __name__ == "__main__":
    sig2cli.run(hi)

The command line interface is automatically created from the signature and the docstring.

$ python my_script.py -h
usage: sig2cli.py [-h] -n NAME [-t TIMES] [-e]

Say hi!

optional arguments:
  -h, --help            show this help message and exit
  -n NAME, --name NAME  person to greet
  -t TIMES, --times TIMES
                        how many times to greet (default: 1)
  -e, --enthusiast      add an exclamation mark at the end (default: False)

$ python my_script.py --name John -t 2 -e
Hi John!
Hi John!

Installation

Install it with pip:

pip install sig2cli

Description

The command line description is taken from the docstring of the method, with the following conventions:

  • the description is everything that precedes the string "Arg" (so Arguments, Args) that starts the argument list.
  • each argument should be in the format : [argtype]

Types are inferred from default arguments, or taken from the docstring if specified. Allowed types are "str", "int", "float", "bool". It supports short args (the first letter of each argument) only if they are all different and no argument starts with "h" (reserved for help) Default bool arguments are registered as flags.