Easily convert function to interactive command line applications
Project description
ARGONAUTS 🧑🏽🚀
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.
🚀 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()
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."""
...
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for argonauts-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42c2b8bb40649757a24939972a52178700ee73382e8a289fd8f88e5ad90fc96d |
|
MD5 | 2fe049186aca72b5ab467bb4905f74e6 |
|
BLAKE2b-256 | b6a1c09d53805d3c57d96da56205e2aa020f03d719a1709295525da0287b210f |