Skip to main content

Easily convert function to interactive command line applications

Project description

ARGONAUTS 🧑🏽‍🚀

PyPI version License: MIT Python Versions


Argonauts is a Python library that transforms your functions into interactive command-line interfaces with ease. Using simple decorators, you can create engaging CLI experiences without the hassle of manual argument parsing.

Argonauts Demo

🚀 Features

  • Transform functions into interactive CLIs with a single decorator
  • Automatic type inference and validation
  • Email, Password Support with validation
  • Path Support with Autosuggestion
  • Chainable interactive functions

📦 Installation

Install Argonauts using pip:

pip install argonauts

Install from source:

git clone <repo-url>
cd argonauts
pip install .

🛠 Usage

Basic Usage

Here's a simple example of how to use Argonaut:

from argonauts import argonaut
from enum import Enum

class PizzaSize(Enum):
    SMALL = "Small"
    MEDIUM = "Medium"
    LARGE = "Large"

class Topping(Enum):
    PEPPERONI = "Pepperoni"
    MUSHROOMS = "Mushrooms"
    ONIONS = "Onions"
    SAUSAGE = "Sausage"
    BELL_PEPPERS = "Bell Peppers"


@argonaut(process_name="We are making your pizza! Keep calm!")
def order_pizza(
    size: PizzaSize,
    toppings: list[Topping],
    extra_cheese: bool = False,
    delivery: bool = True,
):
    """Order a delicious pizza with your favorite toppings."""
    pizza = f"{size.value} pizza with {', '.join(t.value for t in toppings)}"
    if extra_cheese:
        pizza += " and extra cheese"
    print(f"You've ordered: {pizza}")

    time.sleep(20)  # Simulate making the pizza

    if delivery:
        print("Your pizza will be delivered soon!")
    else:
        print("Your pizza is ready for pickup!")

order_pizza()

Chaining Interactive Functions

Argonauts allows you to chain multiple interactive functions with the ability to share the previous arguments:

from argonauts import argonaut, LogBook

args = LogBook()

@argonaut(logbook=args)
def select_movie(title: str, genre: str):
    rating = some_fn_to_get_rating(title)
    return {"title": title, "rating": rating}

@argonaut(logbook=args, include_params=["popcorn", "drinks"]) # Include only the specified parameters
def select_snacks(movie: dict, genre: str, popcorn: bool, drinks: list[Drinks]):
    print(f"Watching {args.title} ({movie['rating']} stars)") # Reuse the title argument
    print("Genre:", genre)
    if popcorn:
        print("- Popcorn")
    print(f"- Drinks: {', '.join(drinks)}")

def movie_night():
    movie = select_movie()
    select_snacks(movie=movie, genre=args.genre) # Reuse the genre argument

movie_night()

Argonauts Demo

Email, Password, and Path Support

Argonauts provides built-in support for email, password, and path inputs with validation:

from argonauts import argonaut
from argonauts.inputs import Email, Password, Path

@argonaut(process_name="Please wait...")
def login(email: Email, password: Password):
    """Login with email and password."""
    ...

@argonaut(process_name="Loading Configurations...")
def configure(config_path: Path):
    """Load configurations from a file."""
    ...

Argonauts Demo

You can customize these Input types by inhereting them and overriding the validate method:

from argonauts.inputs import Path

class JSONFile(Path):
    def validate(self, value: str) -> bool:
        return super().validate(value) and value.endswith(".json")

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for more details.

📄 License

Argonauts is released under the MIT License. See the LICENSE file for details.

🙏 Acknowledgements

  • Questionary for providing an excellent prompt library
  • Rich for beautiful and interactive terminal output

Made with ❤️ for the Developers by the Developers

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

argonauts-0.1.2.tar.gz (5.3 kB view hashes)

Uploaded Source

Built Distribution

argonauts-0.1.2-py3-none-any.whl (6.3 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