from typing import List from tabulate import tabulate from .base import Formatter from ..types import ReportRow class TableFormatter(Formatter): """Форматтер для вывода красивой таблицы в консоль.""" def format(self, rows: List[ReportRow]) -> str: table_rows = [["Проект", "Версия", "Задача", "Статус", "Затрачено"]] for r in rows: table_rows.append( [ r["display_project"], r["display_version"], f"{r['issue_id']}. {r['subject']}", r["status_ru"], r["time_text"], ] ) return tabulate(table_rows, headers="firstrow", tablefmt="fancy_grid") def save(self, rows: List[ReportRow], output_path: str) -> None: # Консольные форматтеры не умеют сохранять в файл напрямую. # Это делается в CLI. raise NotImplementedError("TableFormatter не поддерживает сохранение в файл.") class CompactFormatter(Formatter): """Форматтер для компактного вывода в консоль.""" def format(self, rows: List[ReportRow]) -> str: lines = [] for r in rows: lines.append( f"{r['display_project']} | {r['display_version']} | " f"{r['issue_id']}. {r['subject']} | {r['status_ru']} | {r['time_text']}" ) return "\n".join(lines) def save(self, rows: List[ReportRow], output_path: str) -> None: # Консольные форматтеры не умеют сохранять в файл напрямую. # Это делается в CLI. raise NotImplementedError("CompactFormatter не поддерживает сохранение в файл.")