Metadata-Version: 2.1
Name: Commandopt
Version: 0.2.1
Summary: Turn a dict of arguments into cli commands, ideal companion of docopt.
Home-page: https://github.com/jaegerbobomb/commandopt
Download-URL: https://github.com/jaegerbobomb/commandopt/archive/v0.2.1.tar.gz
Author: notmarrco
Author-email: marc@maj44.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.2
Description-Content-Type: text/markdown
License-File: LICENSE

# commandopt

Turn a dict of arguments into cli commands, ideal companion of docopt.

## Why ?

Using the `commandopt.commandopt` decorator, you are able to declare commands to be
executed depending on the input arguments of your app (required or optional).

It reduces the boilerplate code in your `main()`.

## Signature

```py
def commandopt(mandopts: List, opts: List = None):
    # ...
```

### Call

```py
@commandopt(mandatory_arguments, optional_arguments)
def xxxx(*args, **kwargs):
```

## Example usage

```py
#myapp/myapp.py
"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py new-ship [<name>]
  naval_fate.py --version

Options:
  --version     Show version.

"""
from commandopt import Command
from docopt import docopt

import myapp.commands.ship

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    run = Command(arguments)  # get the registered function
    run(arguments)  # execute the function
    # or
    # run = Command(arguments, call=True)

```

```py
#myapp/commands/ship.py
from commandopt import commandopt

class ShipCommand:

    @commandopt(["ship", "new", "<name>"])
    @commandopt(["new-ship"], ["<name>"])
    def new(arguments):
        """You can stack the decorator if you want."""
        name = arguments["<name>"] or "case when name is empty"
        # ... your code here
```
