DEV Community

Gerrishon Sirere
Gerrishon Sirere

Posted on

Getting Started with quo python

Twitter Follow

Logo

Forever Scalable

Quo is a toolkit for writing Command-Line Interface(CLI) applications and a TUI (Text User Interface) framework for Python.

Quo is making headway towards composing speedy and orderly CLI and TUI applications while forestalling any disappointments brought about by the failure to execute a python application.
Simple to code, easy to learn, and does not come with needless baggage.

Compatibility

Quo works flawlessly with Linux, OSX, and Windows.
Quo requires Python 3.8 or later.

Features

  • [x] Support for Ansi, RGB and Hex color models
  • [x] Support for tabular presentation of data
  • [x] Intuitive progressbars
  • [x] Code completions
  • [x] Nesting of commands
  • [x] Customizable Text User Interface (TUI) dialogs.
  • [x] Automatic help page generation
  • [x] Syntax highlighting
  • [x] Autosuggestions
  • [x] Key Binders

Getting Started

Installation

You can install quo via the Python Package Index (PyPI)

pip install -U quo

Enter fullscreen mode Exit fullscreen mode

In order to check your installation you can use

python -m pip show quo
Enter fullscreen mode Exit fullscreen mode

Run the following to test Quo output on your terminal:

python -m quo

Enter fullscreen mode Exit fullscreen mode

test

Quo Library

Quo contains a number of builtin features you c
an use to create elegant output in your CLI.

Quo echo

To output formatted text to your terminal you can import the echo method.
Try this:

Example 1

 from quo import echo

 echo("Hello, World!", fg="red", italic=True, bold=True)
Enter fullscreen mode Exit fullscreen mode

Hello World

Example 2

 from quo import echo

 echo("Quo is ", nl=False)
 echo("scalable", bg="red", fg="black") 
Enter fullscreen mode Exit fullscreen mode

Scalable

Alternatively, you can import print

 from quo import print

 print('<b>This is bold</b>')
 print('<i>This is italic</i>')
 print('<u>This is underlined</u>')

 # Colors from the ANSI palette.
 print('<red>This is red</red>')
 print('<style fg="green" bg="red">Green on red background</stlye>')

Enter fullscreen mode Exit fullscreen mode

Quo prompt

  • Using quo.prompt method.
 from quo import prompt

 prompt("What is your name?")
Enter fullscreen mode Exit fullscreen mode

quo.prompt

  • Using quo.prompt.Prompt object

Example 1

 from quo.prompt import Prompt

 session = Prompt()
 session.prompt("Type something:") 
Enter fullscreen mode Exit fullscreen mode

Example 2

Real time integer validator


 from quo.prompt import Prompt

 session = Prompt(int=True)
 number = int(session.prompt('Give a number: '))

Enter fullscreen mode Exit fullscreen mode

validate

Example 3

A prompt with a bottom toolbar


  from quo.prompt import Prompt
  from quo.text import Text

  def toolbar():
        return Text('This is a <b><style bg="red">Toolbar</style></b>!')

  # Returns a callable
  session = Prompt(bottom_toolbar=toolbar)
  session.prompt('> ')

Enter fullscreen mode Exit fullscreen mode

validate

Example 4

A placeholder text that's displayed as long as no input s given.

💡 This won't be returned as part of the output.


  from quo.prompt import Prompt
  from quo.text import Text

  session = Prompt(placeholder=Text('<gray>(please type something)</gray>'))
  session.prompt("What is your name?: ")
Enter fullscreen mode Exit fullscreen mode

Example 5

Add colors to the prompt itself.


 from quo.color import Color
 from quo.prompt import Prompt

 style = Color("fg:red")
 session = Prompt(style=style)
 session.prompt("Type something: ")

Enter fullscreen mode Exit fullscreen mode

validate

Read more on Prompt

Quo Console

For more control over quo terminal content, import and construct a Console object.

Bar

Draw a horizontal bar with an optional title, which is a good way of dividing your terminal output in to sections.


 from quo.console import Console

 console = Console()
 console.bar("I am a bar", style="fg:red bg:yellow")

Enter fullscreen mode Exit fullscreen mode

Launching Applications

Quo supports launching applications through Console.launch

Example 1


 from quo.console import Console

 console = Console()
 console.launch("https://quo.rtfd.io/")

Enter fullscreen mode Exit fullscreen mode

Example 2


 from quo.console import Console

 console = Console()
 console.launch("/home/path/README.md", locate=True)

Enter fullscreen mode Exit fullscreen mode

Rule

Used for drawing a horizontal line.

Example 1


 from quo.console import Console

 console = Console()
 console.rule(

Enter fullscreen mode Exit fullscreen mode

Example 2

A multicolored line.


 from quo.console import Console

 console = Console()
 console.rule(multicolored=True)

Enter fullscreen mode Exit fullscreen mode

Multicolored

Spin🔁

Quo can create a context manager that is used to display a spinner on stdout as long as the context has not exited


 import time
 from quo.console import Console

 console = Console()

 with console.spin():
           time.sleep(3)
           print("Hello, World")

Enter fullscreen mode Exit fullscreen mode

Read more on Console

Quo Dialogs

High level API for displaying dialog boxes to the user for informational purposes, or to get input from the user.

Example 1

Message Box dialog


 from quo.dialog import MessageBox

 MessageBox(
       title="Message pop up window", 
       text="Do you want to continue?\nPress ENTER to quit."
              )

Enter fullscreen mode Exit fullscreen mode

Message Box

Example 2

Input Box dialog


 from quo.dialog import InputBox

 InputBox(
      title="InputBox shenanigans",
      text="What Country are you from? :"
        )

Enter fullscreen mode Exit fullscreen mode

Prompt Box

Read more on Dialogs

Quo Key Binding🔐

A key binding is an association between a physical key on akeyboard and a parameter.


 from quo import echo
 from quo.keys import bind
 from quo.prompt import Prompt

 session = Prompt()

 # Print "Hello world" when ctrl-h is pressed
 @bind.add("ctrl-h")
 def _(event):
      echo("Hello, World!")

 session.prompt("")

Enter fullscreen mode Exit fullscreen mode

Read more on Key bindings

Quo Tables

This offers a number of configuration options to set the look and feel of the table, including how borders are rendered and the style and alignment of the columns.

Example 1


 from quo.table import Table

 data = [
     ["Name", "Gender", "Age"],
     ["Alice", "F", 24],
     ["Bob", "M", 19],
     ["Dave", "M", 24]
  ]

 Table(data)

Enter fullscreen mode Exit fullscreen mode

tabulate

Example 2

Right aligned table


 from quo.table import Table

 data = [
    ["Name", "Gender", "Age"],
    ["Alice", "F", 24],
    ["Bob", "M", 19],
    ["Dave", "M", 24]
    ]
 Table(data, align="right")

Enter fullscreen mode Exit fullscreen mode

tabulate

Example 3

Colored table


 from quo.table import Table

 data = [
    ["Name", "Gender", "Age"],
    ["Alice", "F", 24],
    ["Bob", "M", 19],
    ["Dave", "M", 24]

 Table(data, style="fg:green")

Enter fullscreen mode Exit fullscreen mode

tabulate

Example 4

Grid table


 from quo.table import Table

 data = [
    ["Name", "Gender", "Age"],
    ["Alice", "F", 24],
    ["Bob", "M", 19],
    ["Dave", "M", 24]
    ]

 Table(data, theme="grid")

Enter fullscreen mode Exit fullscreen mode

tabulate

Read more on Table

Quo Widgets

A collection of reusable components for building full screen applications.

Frame 🎞️

Draw a border around any container, optionally with a title.


 from quo import container
 from quo.widget import Frame, Label

 content = Frame(
             Label("Hello, World!"),
               title="Quo: python")

 #Press Ctrl-C to exit
 container(content, bind=True, full_screen=True)

Enter fullscreen mode Exit fullscreen mode

Frame

Label

Widget that displays the given text. It is not editable or focusable.

Example 1

This will occupy a minimum space in your terminal


 from quo import container
 from quo.widget import Label

 content = Label("Hello, World", style="fg:black bg:red")

 container(content)

Enter fullscreen mode Exit fullscreen mode

Example 2

This will be a fullscreen application


 from quo import container
 from quo.widget import Label

 content = Label("Hello, World", style="fg:black bg:red")

 # Press Ctrl-C to exit
 container(content, bind=True, full_screen=True)

Enter fullscreen mode Exit fullscreen mode

Example 3

Full screen application using a custom binding key.


 from quo import container
 from quo.keys import bind
 from quo.widget import Label

 content = Label("Hello, World", style="fg:black bg:red")

 #Press Ctrl-Z to exit
 @bind.add("ctrl-z")
 def _(event):
     event.app.exit()

 container(content, bind=True, full_screen=True)

Enter fullscreen mode Exit fullscreen mode

Read more on Widgets

Click the following headings for more:»

Completion

Autocompletion

Press [Tab] to autocomplete


 from quo.prompt import Prompt
 from quo.completion import WordCompleter
 example = WordCompleter(['USA', 'UK', 'Canada', 'Kenya'])
 session = Prompt(completer=example)
 session.prompt('Which country are you from?: ')
Enter fullscreen mode Exit fullscreen mode

Autocompletion

Autosuggestion

Auto suggestion is a way to propose some input completions to the user. Usually, the input is compared to the history and when there is another entry starting with the given text, the completion will be shown as gray text behind the current input. Pressing the right arrow → or ctrl-e will insert this suggestion, alt-f willinsert the first word of the suggestion.


 from quo.history import MemoryHistory
 from quo.prompt import Prompt

 MemoryHistory.append("import os")
 MemoryHistory.append('print("hello")') 
 MemoryHistory.append('print("world")')  
 MemoryHistory.append("import path")

 session = Prompt(history=MemoryHistory, suggest="history")

 while True:
    session.prompt('&gt; ')
Enter fullscreen mode Exit fullscreen mode

Read more on Completions

Documenting Scripts
Quo automatically generates help pages for your command-line tools.

 from quo import print
 from quo.console import command
 from quo.console import app

 @command()
 @app('--count', default=1, help='number of greetings')
 @app('--name', prompt="What is your name?", help="The person to greet")

def hello(count: int, name: str):
    """This script prints hello NAME COUNT times."""
       for x in range(count):
           print(f"Hello {name}!")

 if __name__ == "__main__:
          hello()
Enter fullscreen mode Exit fullscreen mode

And what it looks like:
Help Text

Progress
Creating a new progress bar can be done by calling the class ProgressBar
The progress can be displayed for any iterable. This works by wrapping the iterable (like range) with the class ProgressBar


 import time
 from quo.progress import ProgressBar

 with ProgressBar() as pb:
               for i in pb(range(800)):
                             time.sleep(.01)
Enter fullscreen mode Exit fullscreen mode

Progress

Read more on Progress

For more intricate examples, have a look in the examples directory and the documentation.

Donate🎁

In order to for us to maintain this project and grow our community of contributors.
Donate

Quo is...

Simple
If you know Python you can easily use quo and it can integrate with just about anything.

Getting Help

Community

For discussions about the usage, development, and the future of quo, please join our Google community

Resources

Bug tracker

If you have any suggestions, bug reports, or annoyances please report them
to our issue tracker at
Bug tracker or send an email to:

📥 scalabli@googlegroups.com

Blogs💻

→ How to build CLIs using quo

License📑

License: MIT

This software is licensed under the MIT License. See the License file in the top distribution directory for the full license text.

Code of Conduct

Code of Conduct is adapted from the Contributor Covenant,
version 1.2.0 available at
Code of Conduct

Top comments (0)