From c89cedd080266d25917bebd7c52f57e3b2f7af93 Mon Sep 17 00:00:00 2001 From: Vijay Janapa Reddi Date: Sat, 29 Nov 2025 14:45:09 -0500 Subject: [PATCH] Enhance module test CLI with rich progress bars Added live progress bar to `tito module test --all` command: - Shows spinner, progress bar, and task progress (X/20) - Updates description with current module being tested - Provides better visual feedback during long test runs - Maintains all existing rich output (logo, panels, tables) Uses rich.progress with SpinnerColumn, TextColumn, BarColumn, and TaskProgressColumn for comprehensive progress visualization. This completes the rich CLI enhancement pass for bulk commands. --- tito/commands/module/test.py | 48 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/tito/commands/module/test.py b/tito/commands/module/test.py index eedb1d7a..ea00de58 100644 --- a/tito/commands/module/test.py +++ b/tito/commands/module/test.py @@ -19,6 +19,7 @@ from typing import Dict, List, Tuple from rich.panel import Panel from rich.table import Table from rich.text import Text +from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn, TaskProgressColumn from ..base import BaseCommand @@ -170,28 +171,39 @@ class ModuleTestCommand(BaseCommand): failed = [] errors = {} - for module_num, module_name in sorted(module_mapping.items()): - success, output = self.test_module(module_name, module_num, verbose) + with Progress( + SpinnerColumn(), + TextColumn("[progress.description]{task.description}"), + BarColumn(), + TaskProgressColumn(), + console=console + ) as progress: + task = progress.add_task("[cyan]Testing modules...", total=len(module_mapping)) - if success: - passed.append((module_num, module_name)) - else: - failed.append((module_num, module_name)) - errors[module_num] = output + for module_num, module_name in sorted(module_mapping.items()): + progress.update(task, description=f"[cyan]Testing Module {module_num}: {module_name}...") + success, output = self.test_module(module_name, module_num, verbose) + progress.advance(task) - if stop_on_fail: - console.print() - console.print( - Panel( - f"[red]Testing stopped due to failure in Module {module_num}[/red]\n\n" - f"[dim]Use --verbose to see full error details[/dim]", - title="Stopped on Failure", - border_style="red", + if success: + passed.append((module_num, module_name)) + else: + failed.append((module_num, module_name)) + errors[module_num] = output + + if stop_on_fail: + console.print() + console.print( + Panel( + f"[red]Testing stopped due to failure in Module {module_num}[/red]\n\n" + f"[dim]Use --verbose to see full error details[/dim]", + title="Stopped on Failure", + border_style="red", + ) ) - ) - break + break - console.print() + console.print() # Display summary console.print()