data-quality-env / dataforge /ui /repair_diff.py
Pranesh
deploy: sync staged DataForge Space
66b1c50
"""Rich rendering for repair proposals and transaction output."""
from __future__ import annotations
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from dataforge.repairers.base import ProposedFix
def render_repair_diff(
fixes: list[ProposedFix],
console: Console | None = None,
*,
file_path: str = "",
) -> None:
"""Render a rich table describing proposed repairs."""
target_console = console or Console()
title = "Proposed Repairs"
if file_path:
title = f"{title} | {file_path}"
target_console.print(Panel(title, style="bold cyan", expand=True))
if not fixes:
target_console.print(
Panel("[yellow]No fixes proposed.[/yellow]", title="Result", style="yellow")
)
return
table = Table(title="Repair Diff", show_lines=True, header_style="bold magenta")
table.add_column("Row", justify="right", width=5)
table.add_column("Column", style="cyan", min_width=12)
table.add_column("Old", min_width=12)
table.add_column("New", min_width=12)
table.add_column("Detector", min_width=14)
table.add_column("Confidence", justify="right", min_width=10)
table.add_column("Provenance", min_width=13)
for proposed in fixes:
table.add_row(
str(proposed.fix.row),
proposed.fix.column,
proposed.fix.old_value,
proposed.fix.new_value,
proposed.fix.detector_id,
f"{proposed.confidence:.0%}",
proposed.provenance,
)
target_console.print(table)