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
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e78cd238c91c2e270f2916634b8dcd59d247a7e5d3c1da79a71fdacba8b3e6b6 |
|
MD5 | fba1216aada2fa635d38b6c14f3b0da6 |
|
BLAKE2b-256 | 8ec96d8677c9e00ae6a2cd05b5c9d4d116fc111fbedfa133485fcfdc5feee03b |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42c2b8bb40649757a24939972a52178700ee73382e8a289fd8f88e5ad90fc96d |
|
MD5 | 2fe049186aca72b5ab467bb4905f74e6 |
|
BLAKE2b-256 | b6a1c09d53805d3c57d96da56205e2aa020f03d719a1709295525da0287b210f |