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 details)

Uploaded Source

Built Distribution

argonauts-0.1.2-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file argonauts-0.1.2.tar.gz.

File metadata

  • Download URL: argonauts-0.1.2.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1024-azure

File hashes

Hashes for argonauts-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e78cd238c91c2e270f2916634b8dcd59d247a7e5d3c1da79a71fdacba8b3e6b6
MD5 fba1216aada2fa635d38b6c14f3b0da6
BLAKE2b-256 8ec96d8677c9e00ae6a2cd05b5c9d4d116fc111fbedfa133485fcfdc5feee03b

See more details on using hashes here.

File details

Details for the file argonauts-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: argonauts-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1024-azure

File hashes

Hashes for argonauts-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 42c2b8bb40649757a24939972a52178700ee73382e8a289fd8f88e5ad90fc96d
MD5 2fe049186aca72b5ab467bb4905f74e6
BLAKE2b-256 b6a1c09d53805d3c57d96da56205e2aa020f03d719a1709295525da0287b210f

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