Interactive Prompts¶
Learn how to create interactive CLI applications with user prompts and confirmations.
๐ค AI-Generated Content
This documentation was generated with AI assistance and is still being audited. Some, or potentially a lot, of this information may be inaccurate. Learn more.
Overview¶
Foundation provides utilities for interactive user input, confirmations, and selections through the console module.
Basic Input¶
from provide.foundation.console.input import prompt
name = prompt("Enter your name: ")
print(f"Hello, {name}!")
Input with Default¶
name = prompt("Enter your name: ", default="User")
# If user presses Enter without typing, returns "User"
Yes/No Confirmation¶
from provide.foundation.console.input import confirm
if confirm("Do you want to continue?"):
print("Continuing...")
else:
print("Cancelled")
# With default
if confirm("Delete file?", default=False):
delete_file()
Password Input¶
from provide.foundation.console.input import prompt_password
password = prompt_password("Enter password: ")
# Input is hidden while typing
Input Validation¶
def validate_email(value: str) -> str:
"""Validate email format."""
if "@" not in value:
raise ValueError("Invalid email address")
return value
email = prompt(
"Enter email: ",
validator=validate_email
)
Numeric Input¶
age = prompt("Enter your age: ", type=int)
# Automatically converts to int and re-prompts on invalid input
price = prompt("Enter price: ", type=float)
Choice Selection¶
from provide.foundation.console.input import select
environment = select(
"Select environment:",
choices=["development", "staging", "production"]
)
print(f"Selected: {environment}")
Multi-Line Input¶
from provide.foundation.console.input import prompt_multiline
description = prompt_multiline(
"Enter description (Ctrl+D to finish):\n"
)
Interactive Confirmation Workflow¶
from provide.foundation import pout, perr
from provide.foundation.console.input import confirm, prompt
def interactive_deploy():
"""Interactive deployment workflow."""
# Get environment
env = prompt(
"Environment (dev/prod): ",
validator=lambda v: v if v in ["dev", "prod"] else None
)
# Get version
version = prompt("Version tag: ")
# Show summary
pout("\nDeployment Summary:", bold=True)
pout(f" Environment: {env}")
pout(f" Version: {version}")
pout("")
# Confirm
if not confirm(f"Deploy version {version} to {env}?", default=False):
perr("Deployment cancelled", color="yellow")
return
# Execute deployment
pout("Deploying...", color="cyan")
# ... deployment logic ...
pout("โ
Deployment successful!", color="green")
Input with Retry¶
def get_valid_port():
"""Prompt for port until valid."""
while True:
try:
port = prompt("Enter port (1024-65535): ", type=int)
if 1024 <= port <= 65535:
return port
perr("Port must be between 1024 and 65535")
except ValueError:
perr("Invalid port number")
port = get_valid_port()
Styled Prompts¶
from provide.foundation.console.output import pout
pout("๐ Welcome to the setup wizard!", color="cyan", bold=True)
pout("")
name = prompt("๐ Project name: ")
desc = prompt("๐ Description: ")
version = prompt("๐ข Version: ", default="1.0.0")
Next Steps¶
- Building Commands - Command structure
- Argument Parsing - Handle arguments
- API Reference: Console - Complete console API
See also: examples/cli/