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 не поддерживает сохранение в файл.")