Formatters factory

This commit is contained in:
Артём Кокос
2026-01-25 11:01:34 +07:00
parent f858618a13
commit 8278864b01
11 changed files with 342 additions and 231 deletions

View File

@@ -0,0 +1,42 @@
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
# Словарь для сопоставления расширений файлов с классами форматтеров
FORMATTER_MAP: Dict[str, Type[Formatter]] = {
".odt": ODTFormatter,
".csv": CSVFormatter,
".md": MarkdownFormatter,
}
# Словарь для сопоставления типа вывода (консоль) с классами форматтеров
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