fix(cli): добавлен пользовательский вывод предупреждений

- Зачем:
  - предупреждения из задачи #7 выглядели как фрагменты Python traceback.
- Что:
  - на время запуска CLI установлен однострочный Rich-рендер предупреждений.
  - сохранены буквальный текст сообщений и восстановление глобального hook.
  - single- и batch-сценарии покрыты автоматическим тестом.
- Проверка:
  - uv run pytest tests/test_cli.py -q.
This commit is contained in:
Dmitry Dementiev committed 2026-08-29 01:20:24 +03:00
1 parent f966d4554b
commit b412b73fc0
2 files changed
+71

No files matched your search

+27
View File
@@ -2,6 +2,9 @@
import sys
import time
import warnings
from collections.abc import Callable
from functools import wraps
from pathlib import Path
import typer
@@ -56,6 +59,29 @@ app = typer.Typer()
console = Console(stderr=True)
def _show_cli_warning(
message: Warning | str,
*_args: object,
**_kwargs: object,
) -> None:
"""Печатает предупреждение в пользовательском формате CLI."""
console.print(f"Внимание: {message}", style="yellow", soft_wrap=True, markup=False)
def _with_cli_warning_renderer(
command: Callable[..., None],
) -> Callable[..., None]:
"""Устанавливает CLI-рендер предупреждений на время одного запуска."""
@wraps(command)
def wrapped(*args: object, **kwargs: object) -> None:
with warnings.catch_warnings():
warnings.showwarning = _show_cli_warning
command(*args, **kwargs)
return wrapped
def _format_device_info(device_used: str) -> str:
"""Формирует строку устройства для шапки транскрипта."""
if device_used == "cuda":
@@ -193,6 +219,7 @@ def _print_diarization_report(
@app.command()
@_with_cli_warning_renderer
def main(
files: list[Path] | None = typer.Argument(None, help="Пути к аудио/видеофайлам"),
model: str | None = typer.Option(