from abc import ABC, abstractmethod from typing import Any, List from ..types import ReportRow class Formatter(ABC): """ Абстрактный базовый класс для всех форматтеров. Определяет общий интерфейс для форматирования отчета. Контракт: - format() возвращает строку для текстовых форматтеров (CSV, HTML, Markdown, console) и объект OpenDocument для ODTFormatter. - save() сохраняет результат в файл; консольные форматтеры бросают NotImplementedError. """ @abstractmethod def format(self, rows: List[ReportRow]) -> Any: """ Форматирует список строк отчета в нужный формат. Для текстовых форматтеров возвращает str. Для ODTFormatter возвращает объект OpenDocument. """ pass @abstractmethod def save(self, rows: List[ReportRow], output_path: str) -> None: """ Сохраняет отформатированный отчет в файл по указанному пути. Для форматтеров, которые не поддерживают сохранение (например, консольные), бросает NotImplementedError. """ pass