from typing import Dict, Optional, Type from .base import Formatter from .console import CompactFormatter, TableFormatter from .csv import CSVFormatter from .html import HTMLFormatter from .markdown import MarkdownFormatter from .odt import ODTFormatter # Словарь для сопоставления расширений файлов с классами форматтеров 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