Skip to main content

A Cmd-based framework for writing line-oriented command interpreters.

Project description

enhterm

enhterm is an open source, MIT licensed, Cmd-based framework for writing command interpreters.

Build Status Documentation Status

enhterm provides a class that extends cmd.Cmd and which is also intended to be inherited by a user class, with the end purpose being to create a shell.

Functionality provided by this package is split among mixins, allowing you to construct your own base class if EnhTerm is not suitable.

As with cmd.Cmd, the class constructed as described above can be used like so:

from enhterm import EnhTerm

from enhterm.provider.parser.argparser import ArgParser
from enhterm.provider.parser.argparser.commands import register_commands
from enhterm.provider.stream_provider import StreamProvider

# The stream provider by default reads the input from console.
provider = StreamProvider()

# The text entered by the user then needs to be interpreted.
# Here we use an interpreter based on argparse.
provider.parser = ArgParser(provider=provider)
subparsers = provider.parser.add_subparsers()

# Add built-in commands.
register_commands(subparsers)

# Define you own handler.
def do_add(command, integers):
    return sum(integers)

# Add this command to the argparse library.
parser_add = subparsers.add_parser('add')
parser_add.add_argument(
     'integers', metavar='int', nargs='+', type=int,
     help='integers to be summed (space separated list)')
parser_add.set_defaults(func=do_add)


# Construct the terminal.
class MyShell(EnhTerm):
    """
    Simple terminal.

    Has a command that can add integers and another one
    that quits the interpreter.
    """
    def __init__(self):
        super().__init__(providers=provider)


if __name__ == '__main__':
    print("Type 'add 1 2 3 4 5 6 7 8 9' and you should get back 45")
    print("Type '-h' to get back the usage")
    MyShell().cmd_loop()

Install

pip install enhterm

You can also download/clone the source, in which case you have to:

git clone https://github.com/pyl1b/enhterm.git
python setup.py install

To contribute a patch clone the repo, create a new branch, install in develop mode:

python setup.py develop

What is included

Each of the elements below are implemented in a distinct "mixin" class, which mean that you can create your own combination using EnhTerm class as a template.

Command

Allows python strings to be executed as if the user typed the input at the prompt. This is the base for executing commands in a file.

Exit

Provides the exit command that terminates command loop.

Help

Provides the help command which prints information about the use of the command while accounting for custom commands and shortcuts.

Log Level

Allows changing logging verbosity by issuing commands like set loglevel debug.

Macro

Can record, remove, list and execute previously recorded commands.

Messages

Does not expose any commands but provides the class with a standardized way of issuing messages distinct from the logging mechanism.

Run

Allows executing multiple commands from a string or from a file.

Sub-commands

Commands are usually identified by using the first word the user types. This mixin allows for a more natural way of issuing commands like new macro instead of macro new. Other mixins then add subcommands in their __init__ method.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enhterm-0.2.1.tar.gz (38.8 kB view details)

Uploaded Source

Built Distribution

enhterm-0.2.1-py2.py3-none-any.whl (57.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file enhterm-0.2.1.tar.gz.

File metadata

  • Download URL: enhterm-0.2.1.tar.gz
  • Upload date:
  • Size: 38.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.0

File hashes

Hashes for enhterm-0.2.1.tar.gz
Algorithm Hash digest
SHA256 b15a151b6e6a5f5c9ad963ff4e48ba22eee33262760b3b0c2e0cb94150f66e16
MD5 3fad20a645637288d61e66a10f092c10
BLAKE2b-256 6534a160d19ededfaef61410c53df2eaf36fde9e59058efc79d424dedc989c89

See more details on using hashes here.

File details

Details for the file enhterm-0.2.1-py2.py3-none-any.whl.

File metadata

  • Download URL: enhterm-0.2.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 57.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.0

File hashes

Hashes for enhterm-0.2.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cc7be84716bf58816727d72fcc02107344d95b7241fbb87e1fa749f96d5a1430
MD5 aae167322d904e791df189a9ad359603
BLAKE2b-256 5313ce1630e16a8056d81a091302a3631a49992d91d8cef185e3454e5fb309a8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page