from typing import Dict, Type, Optional from .base import Formatter from .console import TableFormatter, CompactFormatter from .csv import CSVFormatter from .markdown import MarkdownFormatter from .odt import ODTFormatter from .html import HTMLFormatter # Словарь для сопоставления расширений файлов с классами форматтеров FORMATTER_MAP: Dict[str, Type[Formatter]] = { ".odt": ODTFormatter, ".csv": CSVFormatter, ".md": MarkdownFormatter, ".html": HTMLFormatter, } # Словарь для сопоставления типа вывода (консоль) с классами форматтеров CONSOLE_FORMATTER_MAP: Dict[str, Type[Formatter]] = { "table": TableFormatter, "compact": CompactFormatter, } def get_formatter_by_extension(extension: str, **kwargs) -> Optional[Formatter]: """ Возвращает экземпляр форматтера по расширению файла. Ключевые аргументы (**kwargs) передаются в конструктор форматтера. """ formatter_class = FORMATTER_MAP.get(extension.lower()) if formatter_class: return formatter_class(**kwargs) return None def get_console_formatter(formatter_type: str) -> Optional[Formatter]: """ Возвращает экземпляр консольного форматтера по его типу. """ formatter_class = CONSOLE_FORMATTER_MAP.get(formatter_type.lower()) if formatter_class: return formatter_class() return None