Fix package structure and lazy-import ODT formatter
Add missing __init__.py to formatters/ so setuptools.find_packages includes the subpackage in wheel/sdist builds (#16). Move ODTFormatter import from top-level to lazy import inside get_formatter_by_extension() so missing odfpy no longer crashes module load before main() runs. Remove dead except ImportError handler in cli.py save() block; surface a clear 'odfpy is not installed' message when the formatter factory returns None for .odt (#25). Closes #16, closes #25
This commit is contained in:
0
redmine_reporter/formatters/__init__.py
Normal file
0
redmine_reporter/formatters/__init__.py
Normal file
@@ -5,11 +5,11 @@ from .console import CompactFormatter, TableFormatter
|
||||
from .csv import CSVFormatter
|
||||
from .html import HTMLFormatter
|
||||
from .markdown import MarkdownFormatter
|
||||
from .odt import ODTFormatter
|
||||
|
||||
# Словарь для сопоставления расширений файлов с классами форматтеров
|
||||
# Словарь для сопоставления расширений файлов с классами форматтеров.
|
||||
# ODT намеренно отсутствует — его импорт отложен (ленивый), так как odfpy
|
||||
# может быть не установлен. См. get_formatter_by_extension.
|
||||
FORMATTER_MAP: Dict[str, Type[Formatter]] = {
|
||||
".odt": ODTFormatter,
|
||||
".csv": CSVFormatter,
|
||||
".md": MarkdownFormatter,
|
||||
".html": HTMLFormatter,
|
||||
@@ -27,10 +27,23 @@ def get_formatter_by_extension(extension: str, **kwargs) -> Optional[Formatter]:
|
||||
"""
|
||||
Возвращает экземпляр форматтера по расширению файла.
|
||||
Ключевые аргументы (**kwargs) передаются в конструктор форматтера.
|
||||
Возвращает None для .odt, если odfpy не установлен.
|
||||
"""
|
||||
formatter_class = FORMATTER_MAP.get(extension.lower())
|
||||
ext = extension.lower()
|
||||
|
||||
formatter_class = FORMATTER_MAP.get(ext)
|
||||
if formatter_class:
|
||||
return formatter_class(**kwargs)
|
||||
|
||||
# ODT требует odfpy — ленивый импорт, чтобы отсутствие зависимости
|
||||
# не ломало загрузку модуля и другие форматтеры.
|
||||
if ext == ".odt":
|
||||
try:
|
||||
from .odt import ODTFormatter
|
||||
except ImportError:
|
||||
return None
|
||||
return ODTFormatter(**kwargs)
|
||||
|
||||
return None
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user