Metadata-Version: 2.0
Name: jsh
Version: 0.3.3
Summary: Junos-like shell library for Python
Home-page: https://github.com/ocadotechnology/jsh/
Author: InfDev
Author-email: infdev@ocado.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Topic :: Software Development :: Libraries :: Python Modules

=================================
jsh - a Junos-style CLI library
=================================

**JSH** is a Junos-inspired CLI library for your Python apps.
If you've ever logged into a Junos_ device, you'll know how good the CLI is.
It offers:

- tab-completion, including completion of names of items in the config
- help by pressing "?" at any point
- completion on pressing either space, tab or enter

JSH attempts to reproduce some of these features (and others) in a Python library
based on Readline, to allow you to build better quality CLIs for your apps.

Documentation
=============

Full documentation can be found at RTD_.

Installation
============

Install from PyPI using ``pip install jsh``.

Basic Usage
===========

The library takes a CLI "layout", which is a dictionary-based tree structure
describing your CLI commands. For example, a completely useless CLI with
just an ``exit`` command, you would define it like this:

.. code-block:: python

    import jsh

    layout = {
        'exit': jsh.exit,
    }

    cli = jsh.JSH(layout)

    while True:
        try:
            cli.read_and_execute()
        except jsh.JSHError as err:
            print err
        except EOFError:
            break

This creates a basic layout with a single available command (``exit``), passes
it to an instance ``jsh.JSH``, and starts an infinite loop, using the ``read_and_execute``
method of the ``JSH`` CLI object to interact with the user.

This provides a CLI that looks like the following:

::

    > ?
    Possible completions:
      exit
    > ex?
    Possible completions:
      exit
    > exit ?
    Possible completions:
      <[Enter]>   Execute this command
    > exit

.. _Junos: http://www.juniper.net/us/en/products-services/nos/junos/
.. _RTD: http://jsh.readthedocs.org/en/latest/


