Source code for src.utils.progress
"""Rich progress bar utilities for terminal output."""
from rich.console import Console
from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn, TaskProgressColumn, TimeElapsedColumn
from rich.panel import Panel
from rich.table import Table
from rich.text import Text
from typing import Optional, Dict, Any
console = Console()
[docs]
def print_summary(
project_name: str,
output_dir: str,
metrics: Dict[str, Any],
num_charts: int,
elapsed_time: float
):
"""Print analysis completion summary."""
# Create summary table
table = Table(show_header=False, box=None, padding=(0, 2))
table.add_column(style="bold")
table.add_column()
table.add_row("Status:", "[green]Analysis Complete[/green]")
table.add_row(" Brands:", f"{metrics.get('num_brands', 0)} analyzed")
table.add_row(" Data Points:", f"{metrics.get('data_points', 0)} processed")
table.add_row(" Charts:", f"{num_charts} generated")
table.add_row(" Time:", f"{elapsed_time:.1f} seconds")
table.add_row(" Output:", output_dir)
console.print()
console.print(Panel(table, title="[bold green]Analysis Complete[/bold green]", border_style="green"))
console.print()
# Print key findings if available
if 'leader' in metrics:
console.print(f"[bold]Key Findings:[/bold]")
console.print(f" - Market Leader: [cyan]{metrics['leader']}[/cyan] ({metrics.get('leader_share', 0):.1f}% avg share)")
if 'highest_growth' in metrics:
console.print(f" - Highest Growth: [green]{metrics['highest_growth']}[/green]")
if 'most_stable' in metrics:
console.print(f" - Most Stable: [blue]{metrics['most_stable']}[/blue]")
console.print()
[docs]
def create_progress() -> Progress:
"""Create a rich Progress instance with custom columns."""
return Progress(
SpinnerColumn(),
TextColumn("[progress.description]{task.description}"),
BarColumn(),
TaskProgressColumn(),
TimeElapsedColumn(),
console=console
)