Skip to main content

A library to create command line interfaces.

Project description

Shell Creator

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops (not yet implemented)
  • Easily extensible with new commands through simple class inheritance
  • Colorful, with nice logging

How to use

Help and Exiting

use the following commands to get help and exit:

  • help --commands will give you the list of all commands in the shell
  • help --variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

Operator Description
** Exponent
-x Unary minus
*, /, //, % Multiplication, Division, Floor division, Modulus
+, - Addition, Subtraction
==, !=, >, >=, <, <= Comparisons
not Logical NOT
and Logical AND
or Logical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo $var
set var=$var2 + 485 * 12
unset $var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
  command
  command
elif $var2 > 50
  command
else
  command
  command
end

while $var3 + 40 < $var4
  command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

class ReadFile(Command):
  usage='''
  read_file

  Usage:
      read_file -h
      read_file [--f FORMAT] FILE

  Options:
      -h, --help                    Print this help message
      -f FORMAT, --format=FORMAT    The format of the file to read
  '''

  def action(self):
      print(self.args)
      print(self.args['FORMAT'])
      print(self.args['FILE'])

  shell.addCommand('read_file', ReadFile)

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

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

ShellCreator-0.4.2.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ShellCreator-0.4.2-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file ShellCreator-0.4.2.tar.gz.

File metadata

  • Download URL: ShellCreator-0.4.2.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.48.1 CPython/3.8.2

File hashes

Hashes for ShellCreator-0.4.2.tar.gz
Algorithm Hash digest
SHA256 88f373b1d94a3bd64db8223aec8860d0db28fbfa7ef3730316ae3fbdb15f55d7
MD5 72caf874e9126aa5aee9629c8d5c34b3
BLAKE2b-256 f58f0781dab7bf57bae29024b489ac8193c8e3e10a505358f8ab16cbe2ad5efc

See more details on using hashes here.

File details

Details for the file ShellCreator-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: ShellCreator-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.48.1 CPython/3.8.2

File hashes

Hashes for ShellCreator-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 40557590ba977547f26c83de9346d89acfe8a2113c4ff6f7c56038c373670f07
MD5 e9a652a170dd52339e95c2ac74fcd27f
BLAKE2b-256 1afed06ff4ba15d3a144cbe39d71330ba734c2fd7975f8dba07e2218c4c8d795

See more details on using hashes here.

Supported by

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