Initial commit
This commit is contained in:
322
skills/fire-patterns/examples/rich-integration.md
Normal file
322
skills/fire-patterns/examples/rich-integration.md
Normal file
@@ -0,0 +1,322 @@
|
||||
# Rich Console Integration Example
|
||||
|
||||
This example shows how to integrate Fire CLI with Rich library for beautiful terminal output.
|
||||
|
||||
## Generate Rich CLI
|
||||
|
||||
```bash
|
||||
./scripts/generate-fire-cli.sh \
|
||||
--name "Monitor" \
|
||||
--description "System monitoring CLI" \
|
||||
--template rich \
|
||||
--output monitor.py
|
||||
```
|
||||
|
||||
## Rich Features
|
||||
|
||||
### Tables
|
||||
|
||||
Display data in formatted tables:
|
||||
|
||||
```python
|
||||
from rich.table import Table
|
||||
|
||||
def list_items(self):
|
||||
"""List items with table formatting"""
|
||||
items = [
|
||||
{"id": 1, "name": "Service A", "status": "active", "uptime": "99.9%"},
|
||||
{"id": 2, "name": "Service B", "status": "down", "uptime": "0%"},
|
||||
{"id": 3, "name": "Service C", "status": "pending", "uptime": "N/A"},
|
||||
]
|
||||
|
||||
table = Table(title="System Services", show_header=True, header_style="bold magenta")
|
||||
table.add_column("ID", style="cyan", width=6)
|
||||
table.add_column("Name", style="green")
|
||||
table.add_column("Status", style="yellow")
|
||||
table.add_column("Uptime", justify="right", style="blue")
|
||||
|
||||
for item in items:
|
||||
# Dynamic styling based on status
|
||||
status_style = {
|
||||
"active": "green",
|
||||
"down": "red",
|
||||
"pending": "yellow"
|
||||
}.get(item['status'], "white")
|
||||
|
||||
table.add_row(
|
||||
str(item['id']),
|
||||
item['name'],
|
||||
f"[{status_style}]{item['status']}[/{status_style}]",
|
||||
item['uptime']
|
||||
)
|
||||
|
||||
console.print(table)
|
||||
return items
|
||||
```
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
python monitor.py list-items
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
System Services
|
||||
┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
|
||||
┃ ID ┃ Name ┃ Status ┃ Uptime ┃
|
||||
┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━┩
|
||||
│ 1 │ Service A │ active │ 99.9% │
|
||||
│ 2 │ Service B │ down │ 0% │
|
||||
│ 3 │ Service C │ pending │ N/A │
|
||||
└──────┴───────────┴─────────┴────────┘
|
||||
```
|
||||
|
||||
### Progress Bars
|
||||
|
||||
Show progress for long-running operations:
|
||||
|
||||
```python
|
||||
from rich.progress import track
|
||||
import time
|
||||
|
||||
def process(self, count=100):
|
||||
"""Process items with progress bar
|
||||
|
||||
Args:
|
||||
count: Number of items to process
|
||||
"""
|
||||
console.print("[cyan]Starting processing...[/cyan]")
|
||||
|
||||
results = []
|
||||
for i in track(range(count), description="Processing..."):
|
||||
time.sleep(0.01) # Simulate work
|
||||
results.append(i)
|
||||
|
||||
console.print("[green]✓[/green] Processing complete!")
|
||||
return {"processed": len(results)}
|
||||
```
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
python monitor.py process --count=50
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
Starting processing...
|
||||
Processing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
|
||||
✓ Processing complete!
|
||||
```
|
||||
|
||||
### Panels
|
||||
|
||||
Display information in bordered panels:
|
||||
|
||||
```python
|
||||
from rich.panel import Panel
|
||||
|
||||
def status(self):
|
||||
"""Display system status"""
|
||||
panel = Panel(
|
||||
"[bold green]System Running[/bold green]\n"
|
||||
"Version: 1.0.0\n"
|
||||
"Uptime: 24 hours\n"
|
||||
"Load: [yellow]0.45[/yellow]\n"
|
||||
"Memory: [blue]45%[/blue]",
|
||||
title="System Status",
|
||||
border_style="green"
|
||||
)
|
||||
console.print(panel)
|
||||
|
||||
return {
|
||||
"status": "running",
|
||||
"version": "1.0.0",
|
||||
"uptime": "24h"
|
||||
}
|
||||
```
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
python monitor.py status
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
╭─────── System Status ────────╮
|
||||
│ System Running │
|
||||
│ Version: 1.0.0 │
|
||||
│ Uptime: 24 hours │
|
||||
│ Load: 0.45 │
|
||||
│ Memory: 45% │
|
||||
╰──────────────────────────────╯
|
||||
```
|
||||
|
||||
### Trees
|
||||
|
||||
Display hierarchical data:
|
||||
|
||||
```python
|
||||
from rich.tree import Tree
|
||||
|
||||
def show_structure(self):
|
||||
"""Display project structure"""
|
||||
tree = Tree("📁 Project Root")
|
||||
|
||||
src = tree.add("📁 src")
|
||||
src.add("📄 main.py")
|
||||
src.add("📄 config.py")
|
||||
|
||||
tests = tree.add("📁 tests")
|
||||
tests.add("📄 test_main.py")
|
||||
tests.add("📄 test_config.py")
|
||||
|
||||
tree.add("📄 README.md")
|
||||
tree.add("📄 requirements.txt")
|
||||
|
||||
console.print(tree)
|
||||
```
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
python monitor.py show-structure
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
📁 Project Root
|
||||
├── 📁 src
|
||||
│ ├── 📄 main.py
|
||||
│ └── 📄 config.py
|
||||
├── 📁 tests
|
||||
│ ├── 📄 test_main.py
|
||||
│ └── 📄 test_config.py
|
||||
├── 📄 README.md
|
||||
└── 📄 requirements.txt
|
||||
```
|
||||
|
||||
### Styled Output
|
||||
|
||||
Use rich markup for styled text:
|
||||
|
||||
```python
|
||||
def deploy(self, environment):
|
||||
"""Deploy to environment
|
||||
|
||||
Args:
|
||||
environment: Target environment
|
||||
"""
|
||||
console.print(f"[bold cyan]Deploying to {environment}...[/bold cyan]")
|
||||
console.print("[dim]Step 1: Building...[/dim]")
|
||||
console.print("[dim]Step 2: Testing...[/dim]")
|
||||
console.print("[dim]Step 3: Uploading...[/dim]")
|
||||
console.print("[green]✓[/green] Deployment complete!")
|
||||
|
||||
# Error example
|
||||
if environment == "production":
|
||||
console.print("[red]⚠ Production deployment requires approval[/red]")
|
||||
```
|
||||
|
||||
### Color Palette
|
||||
|
||||
Common rich colors and styles:
|
||||
|
||||
```python
|
||||
# Colors
|
||||
console.print("[red]Error message[/red]")
|
||||
console.print("[green]Success message[/green]")
|
||||
console.print("[yellow]Warning message[/yellow]")
|
||||
console.print("[blue]Info message[/blue]")
|
||||
console.print("[cyan]Action message[/cyan]")
|
||||
console.print("[magenta]Highlight[/magenta]")
|
||||
|
||||
# Styles
|
||||
console.print("[bold]Bold text[/bold]")
|
||||
console.print("[dim]Dimmed text[/dim]")
|
||||
console.print("[italic]Italic text[/italic]")
|
||||
console.print("[underline]Underlined text[/underline]")
|
||||
|
||||
# Combinations
|
||||
console.print("[bold red]Bold red text[/bold red]")
|
||||
console.print("[dim yellow]Dimmed yellow text[/dim yellow]")
|
||||
|
||||
# Emojis
|
||||
console.print("✓ Success")
|
||||
console.print("✗ Failure")
|
||||
console.print("⚠ Warning")
|
||||
console.print("ℹ Info")
|
||||
console.print("→ Next step")
|
||||
console.print("🚀 Deploy")
|
||||
console.print("📦 Package")
|
||||
```
|
||||
|
||||
## Complete Rich CLI Example
|
||||
|
||||
```python
|
||||
import fire
|
||||
from rich.console import Console
|
||||
from rich.table import Table
|
||||
from rich.panel import Panel
|
||||
from rich.progress import track
|
||||
import time
|
||||
|
||||
console = Console()
|
||||
|
||||
class Monitor:
|
||||
"""System monitoring CLI with rich output"""
|
||||
|
||||
def __init__(self):
|
||||
self.version = "1.0.0"
|
||||
|
||||
def status(self):
|
||||
"""Display comprehensive status"""
|
||||
# Header panel
|
||||
console.print(Panel(
|
||||
"[bold green]System Online[/bold green]",
|
||||
title="Monitor Status",
|
||||
border_style="green"
|
||||
))
|
||||
|
||||
# Services table
|
||||
table = Table(title="Services")
|
||||
table.add_column("Service", style="cyan")
|
||||
table.add_column("Status", style="green")
|
||||
table.add_column("Load", justify="right")
|
||||
|
||||
table.add_row("API", "[green]●[/green] Running", "45%")
|
||||
table.add_row("DB", "[green]●[/green] Running", "23%")
|
||||
table.add_row("Cache", "[yellow]●[/yellow] Degraded", "78%")
|
||||
|
||||
console.print(table)
|
||||
|
||||
def deploy(self, env='staging'):
|
||||
"""Deploy with visual feedback"""
|
||||
console.print(Panel(
|
||||
f"[bold]Deploying to {env}[/bold]",
|
||||
border_style="cyan"
|
||||
))
|
||||
|
||||
steps = ["Build", "Test", "Upload", "Verify"]
|
||||
for step in track(steps, description="Deploying..."):
|
||||
time.sleep(0.5)
|
||||
|
||||
console.print("[green]✓[/green] Deployment successful!")
|
||||
|
||||
if __name__ == '__main__':
|
||||
fire.Fire(Monitor)
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install fire rich
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use Console Instance**: Create one `Console()` instance and reuse it
|
||||
2. **Consistent Colors**: Use consistent colors for similar message types
|
||||
3. **Progress for Long Tasks**: Always show progress for operations >1 second
|
||||
4. **Tables for Lists**: Use tables instead of plain text for structured data
|
||||
5. **Panels for Sections**: Use panels to separate different output sections
|
||||
6. **Emojis Sparingly**: Use emojis to enhance, not clutter
|
||||
7. **Test in Different Terminals**: Rich output varies by terminal capabilities
|
||||
Reference in New Issue
Block a user