Skip to main content

A library of elements for interactive TUIs in Python

Project description

BeauPy

beaupy

A Python library of interactive CLI elements you have been looking for


Tests Lint codecov Maintainability Rating Security Rating PyPI - Downloads

For documentation but more and prettier see here

Acknowledgment

BeauPy stands on the shoulders of giants. It is based on another library with which it shares some of the source code, cutie, developed by Kamik423. It has begun as a fork but has since diverged into it's own thing and as such, detached from the original repository.

Overview

BeauPy implements a number of common interactive elements:

Function Functionality
select Prompt to pick a choice from a list
select_multiple Prompt to select one or multiple choices from a list
confirm Prompt with a question and yes/no options
prompt Prompt that takes free input with optional validation, type conversion and input hiding

Getting Started

BeauPy is a library of interactive TUI elements for CLI applications.

BeauPy is

  • rich friendly
  • stylable
  • opinionated
  • configurable

Installation

From PyPI:

pip install beaupy

From source:

git clone https://github.com/petereon/beaupy.git
poetry build
pip install ./dist/beaupy-{{some-version}}-py3-none-any.whl

Example

example

TUI elements shown in the above gif are the result of the follwing code:

import beaupy


def main():
    """Main."""
    if beaupy.confirm("Are you brave enough to continue?"):
        names = [
            "Arthur, King of the Britons",
            "Sir Lancelot the Brave",
            "Sir Robin the Not-Quite-So-Brave-as-Sir-Lancelot",
            "Sir Bedevere the Wise",
            "Sir Galahad the Pure",
        ]

        name = beaupy.select(names, cursor_index=3, cursor="🏰")
        print(f"Welcome, {name}")
        # Get an integer greater or equal to 0
        age = beaupy.prompt("What is your age?", target_type=int, validator=lambda val: val > 0)
        nemeses_options = [
            "The French",
            "The Police",
            "The Knights Who Say Ni",
            "Women",
            "The Black Knight",
            "The Bridge Keeper",
            "The Rabbit of Caerbannog",
        ]
        print("Choose your nemeses")
        # Choose multiple options from a list
        nemeses = beaupy.select_multiple(nemeses_options)
        # Get input without showing it being typed
        quest = beaupy.prompt("What is your quest?", secure=True)
        print(f"{name}'s quest (who is {age}) is {quest}.")
        if nemeses:
            if len(nemeses) == 1:
                print(f"His nemesis is {nemeses[0]}.")
            else:
                print(f'His nemeses are {" and ".join(nemeses)}.')
        else:
            print("He has no nemesis.")

For more information refer to more_examples or definitive, but much less exciting api documentation

Roadmap

This repository has a associated GitHub project where work that is currently done can be seen

Contributing

If you want to contribute, please feel free to suggest features or implement them yourself.

Also please report any issues and bugs you might find!

Development

To start development you can clone the repository:

git clone https://github.com/petereon/beaupy.git

Change the directory to the project directory:

cd ./beaupy/

This project uses poetry as a dependency manager. You can install the dependencies using:

poetry install

For testing, this project relies on ward. It is included as a development dependency, so after installing the dependencies you can simply execute the following:

poetry run poe test

After you have made your changes, create a pull request towards a master branch of this repository

Looking forward to your pull requests!

License

The project is licensed under the MIT License.

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

beaupy-1.2.0.tar.gz (11.7 kB view hashes)

Uploaded Source

Built Distribution

beaupy-1.2.0-py3-none-any.whl (8.9 kB view hashes)

Uploaded Python 3

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