clifactory

Command line made as easy as a web app


License
WTFPL
Install
pip install clifactory==0.1.1

Documentation

clifactory

https://travis-ci.org/thomas-maurice/clifactory.svg?branch=master

Writing CLI is NOT funny. Especially with all the argument parsing and shit. This is why this module exists.

Installing

$ pip install clifactory

Basic Usage

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from clifactory import CommandLineInterface, Argument

cli = CommandLineInterface()
users = ["John Doe", "Dick Head"]

@cli.endpoint(Argument('user', help='username to add'))
def do_user_add(args):
    users.append(args.user)
    print users

@cli.endpoint()
def do_user_list(args):
    print users

    cli.parse()

As shown in the example.py file.

You can run it like:

$ ./exemple.py user add
usage: exemple.py user add [-h] user
exemple.py user add: error: too few arguments
$ ./exemple.py user add "foo bar"
['John Doe', 'Dick Head', 'foo bar']

Simple as that :)

Documentation

Some more documentation is comming, stay tuned.

Using the module

You have to import the components you need, which for now are:

  • CommandLineInterface
  • Argument
  • ExclusiveGroup

Then instanciate a CommandLineInterface:

cli = CommandLineInterface()

Then decorate your endpoint as follows:

@cli.endpoint(
    Argument('argument', help="some help"), # positional arg
    Argument('--user', '-u') # optional argument
)
def do_something(args):
    print args # args is a argparse.Namespace object

You can add as many arguments as you wish, the parameters have to follow the argparse.add_argument syntax. Note that your function's name must be prefixed with do_ in order for the parsing to work. It will just break the name of the function into a "tree" where each _-delimited word will be a leaf. So you can add more methods to your 'user' endpoint.

Finally to parse something, just call:

cli.parse()

This will parse arguments from sys.argv. Alternatively, you may parse an arbitrary string:

cli.parse("some string")

I told you it does not have to be hard!

Licence

Copyright (C) 2015  Thomas Maurice <thomas@maurice.fr>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.