Metadata-Version: 2.1
Name: mach.py
Version: 0.4.4
Summary: Create CLI interfaces quickly
Home-page: https://github.com/oz123/mach
Author: Oz N Tiram
Author-email: oz.tiram@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Intended Audience :: System Administrators
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Topic :: Software Development
License-File: LICENSE
License-File: AUTHORS

========
M.A.C.H
========
.. image:: https://readthedocs.org/projects/mach/badge/?version=latest
   :target: http://mach.readthedocs.io/en/latest/?badge=latest
.. image:: https://travis-ci.org/oz123/mach.svg?branch=master
   :target: https://travis-ci.org/oz123/mach
.. image:: https://coveralls.io/repos/github/oz123/mach/badge.svg?branch=master
   :target: https://coveralls.io/github/oz123/mach?branch=master

Magical Argparse Command Helper

.. image:: https://raw.githubusercontent.com/oz123/mach/master/imgs/mach-logo.jpg


Features
--------

 * Get your CLI interfaces quickly
 * Turn a simple class to a CLI application or an interactive interpreter.


Given:

.. code:: python

  class Calculator:

      def add(self, a, b):
          """adds two numbers and prints the result"""
          return a + b

      def div(self, a, b):
          """divide one number by the other"""
          return a / b

You can make command line application using the decorator ``mach1``:

.. code:: python

   from mach import mach1

   @mach1()
   class Calculator:

       def add(self, int: a, int: b):
           """adds two numbers and prints the result"""
          print(a + b)

       def div(self, int: a, int: b):
           """divide one number by the other"""
          print(a / b)


   calc = Calculator()

   calc.run()

Now if you run the module, you will get a program that you can invoke with
the flag ``-h`` or ``--help``:

.. code:: shell

   $ python calc.py -h
   usage: calc.py [-h] {add,div} ...

   positional arguments:
   {add,div}   commands

      add       adds two numbers and prints the result
      div       divide one number by the other

   optional arguments:
     -h, --help  show this help message and exit


each method is a subcommand, with type checking and it's own very help.
Hench, this won't work:

.. code:: shell

   $ python calc.py add foo bar
   usage: calc.py add [-h] b a
   calc.py add: error: argument b: invalid int value: 'foo'

And this will:

.. code:: shell

   $ python calc.py add 4 9
   13

To see the help of the subcommand use ``-h``:

.. code:: shell

   $ python calc.py add -h
   usage: calc.py add [-h] b a

   positional arguments:
    b
    a

   optional arguments:
     -h, --help  show this help message and exit

With the help of the decorator ``mach2`` you can turn your class to CLI
application and have also an iteractive shell which invoke when no
parameters are given:

.. code:: shell

   $ ./examples/calc2.py
   Welcome to the calc shell. Type help or ? to list commands.

   calc2 > ?

   Documented commands (type help <topic>):
   ========================================
   add  div  exit  help

   calc2 > help add
   adds two numbers and prints the result
   calc2 > add 2 4
   6
   calc2 > div 6 2
   3.0
   calc2 > exit
   Come back soon ...
   $

Installation
------------

You can get mach from PyPI using pip::

   $ pip install mach.py



