Metadata-Version: 2.1
Name: auto-cli-py
Version: 0.4.6
Summary: auto-cli-py: python package to automatically create CLI commands from function via introspection
Home-page: http://github.com/tangledpath/auto-cli-py
Author: Steven Miers
Author-email: steven.miers@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown

# auto-cli-py
Python Library that builds a complete CLI given one or more functions.

Most options are set using introspection/signature and annotation functionality, so very little configuration has to be done.

## Setup

### TL;DR Install for usage
```bash
# Install from github
pip install auto-cli-py

# See example code and output
python examples.py

```

### In python code
## Development
* Standard python packaging - Follows methodologies from: https://python-packaging.readthedocs.io/en/latest/minimal
.html
* Uses pytest

### Pytest
https://docs.pytest.org/en/latest/

### Python (Anaconda) environment
*(assumes anaconda is properly installed)*
```bash
# First time. Create conda environment from environment.yml and activate it:
conda env create -f environment.yml -n auto-cli-py
conda activate auto-cli-py
```

```bash
# If environment changes:
conda activate auto-cli-py
conda env update -f=environment.yml
# -- OR remove and restart --
conda remove --name auto-cli-py --all
conda env create -f environment.yml
```

### Activate environment
```bash
conda activate auto-cli-py

# This symlinks the installed auto_cli package to the source:
pip install -e .
```

### Preparation
```bash
conda activate auto-cli-py
```

### Linting and Testing
*pytest behavior and output is controlled through `auto_cli/tests/pytest.ini`*

```bash
# Lint all code:
pylint auto_cli

# Run all tests
pytest

# See more options for pytest:
pytest --help

# This is handy:
pytest --fixtures-per-test

```

### Installation (other)

```bash
# AND/OR Install from a specific github branch
pip uninstall auto-cli-py
pip install git+https://github.com/tangledpath/auto-cli-py.git@features/blah
```


---
---## Example
```python
#!/usr/bin/env python
"""
  Simple Examples of CLI creation.
"""
import sys
from auto_cli.cli import CLI
import enum

def foo():
  print("FOO!")

def train(
  data_dir:str='./data/',
  initial_learning_rate:float=0.0001,
  seed:int=2112,
  batch_size:int=512,
  epochs:int = 20):
  print("Training with initial_learning_rate:{initial_learning_rate}, seed:{seed}, batch_size:{batch_size}, epochs:{epochs} into data_dir:{data_dir}")

#AnimalEnum = enum.Enum('Animal', 'ANT BEE CAT DOG')
class AnimalEnum(enum.Enum):
  ANT = 1
  BEE = 2
  CAT = 3
  DOG = 4

def count_animals(count:int=20, animal:AnimalEnum=AnimalEnum.BEE):
  return count

if __name__ == '__main__':
  fn_opts = {
    'foo':   {'description':'Foobar'},
    'train': {'description':'Train'},
    'count_animals': {'description':'Count Animals'},
  }

  cli = CLI(sys.modules[__name__], function_opts=fn_opts, title="Foobar Example CLI")
  cli.display()



`
`
`

