Files
redmine-reporter/redmine_reporter/formatters/base.py
2026-03-28 23:55:46 +07:00

34 lines
1.5 KiB
Python

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