https://github.com/xevoinc/argexec
Expose your Python functions to the command line with one easy step!
https://github.com/xevoinc/argexec
argexec argparse argparser libraries pypi pypi-packages python python-3 python-3-8 python-decorator python-decorators python-functional python-library python-utility python38
Last synced: 9 months ago
JSON representation
Expose your Python functions to the command line with one easy step!
- Host: GitHub
- URL: https://github.com/xevoinc/argexec
- Owner: XevoInc
- License: other
- Created: 2020-06-09T21:53:17.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-08-06T00:14:17.000Z (over 5 years ago)
- Last Synced: 2025-04-13T23:16:08.466Z (9 months ago)
- Topics: argexec, argparse, argparser, libraries, pypi, pypi-packages, python, python-3, python-3-8, python-decorator, python-decorators, python-functional, python-library, python-utility, python38
- Language: Python
- Homepage:
- Size: 14.6 KB
- Stars: 7
- Watchers: 6
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Argexec

[](https://pypi.org/project/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