Metadata-Version: 2.1
Name: auto-cli-py
Version: 0.4.5
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
Description: # 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
        #!/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()
        
        
        
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
