====================================================================================================
                                             Intermake                                              
====================================================================================================

Automated application frontend.

example/__init__.py::

    from intermake import Application 

    app = Application( "Example" )

    @app.command()
    def say_hello(n : int):
        """says hello n times"""
        print("hello " * n)

example/__main__.py::

    import example
    example.app.start()

Usage::

      example say_hello 2
    ⇝ hello hello
    
      example help say_hello
    ⇝ says hello n times

      example gui
    ⇝ welcome to Example's graphical user interface
      *click say hello*
      *set n = 2*
    ⇝ *message box: hello hello*
      *click x*
        
      example pyi
    ⇝ welcome to Example's python interactive shell
      say_hello(2)
    ⇝ hello hello
      exit()

      example cli
    ⇝ welcome to Example's command line interactive
      say_hello 2
    ⇝ hello hello
      exit

      python
      import example
      example.say_hello(2)
    ⇝ hello hello
      exit()


.. attention::

    **Full documentation can be found `here<http://software.rusilowicz.com/intermake>`_.**

.. contents::

----------------------------------------------------------------------------------------------------
                                         What is Intermake?                                         
----------------------------------------------------------------------------------------------------

`Intermake`:t: is a library that automatically provides multiple front-ends a `Python`:t: application.
Once an application is registered with `Intermake`:t:, the following interfaces are provided:

* Command line arguments
* Command line interface (CLI)
* Python interactive shell
* Graphical user interface (GUI)
* Python library interface (DLL)
* Interactive Jupyter notebook
* ***Custom*** front-ends are also supported


----------------------------------------------------------------------------------------------------
                                             Rationale                                              
----------------------------------------------------------------------------------------------------

Intermake aims to avoid repetition by being ***reflective***, pulling data-types from PEP484_
annotations and documentation from doc-strings. However, it also aims to be ***architecturally
simple***, avoiding guesswork, behind the scenes magic and duck-typing where at all possible.

Intermake permits:

* all frontends to share a common command set
* a global application state to persist between commands
* minimal setup (by automatically inferring datatypes and documentation)
* standard Python functions to be used (such as `print`)
* original information to be retained (i.e. functions exposed through Intermake remain unchanged)
* applications to derive from one another


----------------------------------------------------------------------------------------------------
                                           Example usage                                            
----------------------------------------------------------------------------------------------------

* [Bio42](https://bitbucket.org/mjr129/bio42)
* [Neocommand](https://bitbucket.org/mjr129/neocommand)
* [Groot](https://bitbucket.org/mjr129/groot)
* [Faketree](https://bitbucket.org/mjr129/faketree)


----------------------------------------------------------------------------------------------------
                                              License                                               
----------------------------------------------------------------------------------------------------

`Intermake`:t: is licensed under the [GNU AGPLv3](https://www.gnu.org/licenses/agpl-3.0.html).


.. **** REFERENCES ****

.. _click: https://palletsprojects.com/p/click
.. _PEP484: https://www.python.org/dev/peps/pep-0484
