Metadata-Version: 2.1
Name: argexec
Version: 1.0.3
Summary: Expose your Python functions to the command line with one easy step!
Home-page: https://github.com/XevoInc/argexec
Author: Ryan Rowe
Author-email: rrowe@xevo.com
License: Apache License, Version 2.0
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dynamic-dispatch
Requires-Dist: typeguard >=2.9.1
Requires-Dist: typing-extensions ; python_version < "3.8"
Provides-Extra: dev
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'

# Argexec

![Build status](https://img.shields.io/github/workflow/status/XevoInc/argexec/Push%20CI/master)
[![PyPI](https://img.shields.io/pypi/v/argexec)](https://pypi.org/project/argexec/)
![PyPI - License](https://img.shields.io/pypi/l/argexec)

An unobtrusive, elegant mechanism to provide seamless command line interfaces through argparse for Python functions.
All you have to do is decorate your function of choice with `@argexec` and away you go!

## Features
* Description parsing from docstring
* Argument help parsing from reStructuredText-like docstrings
* Argument type enforcement via [typeguard](https://github.com/agronholm/typeguard) from 
  [type hints](https://www.python.org/dev/peps/pep-0484/)
* Argument default values from function signature
* Support for the following argument types:
  * All builtin primitives (`bool`, `int`, `float`, `str`, `bytes`)
  * Fixed length tuples of a supported type
  * Variable length tuples of a supported type
  * Lists of a supported type
* Extensible, complex custom type parsing via [`dynamic_dispatch`](https://github.com/XevoInc/dynamic_dispatch)

## Install

You may install this via the [`argexec`](https://pypi.org/project/argexec/) package on [PyPi](https://pypi.org):

```bash
pip3 install argexec
```

## Usage

The decorator may be applied to any Python function that meets the following requirements:
* Is not a member function
* Has [PEP 484](https://www.python.org/dev/peps/pep-0484/) type hints for all parameters
* Does not use `*args` or `**kwargs`

Example (`foo.py`):
```python
#!/usr/bin/python3

from typing import Tuple

from argexec import argexec
from argexec.types import LogLevel

@argexec
def _(w: int, x: Tuple[str, ...], y: LogLevel, z: bool = True):
    """
    Hello, world!

    :param w: foo.
    :param x: bar.
    :param y: baz.
    :param z: qux.
    """
    pass
```

```
$ ./foo.py --help
usage: foo.py [-h] [-y] [--no-z] w [x [x ...]]

Hello, world!

positional arguments:
  w           [int] foo
  x           [Tuple[str, ...]] bar

optional arguments:
  -h, --help  show this help message and exit
  -y, --y     [LogLevel=CRITICAL] baz (more flags for lower level)
  --no-z      [bool=True] qux
```



## Development

When developing, it is recommended to use Pipenv. To create your development environment:

```bash
pipenv install --dev
```

### Testing

TODO
