fix(notifier): маппинг input_data в модели Task для уведомлений о завершении

send_task_done падал с AttributeError: минимальная модель Task в notifier
не мапила колонку input_data (она есть в БД и в полной модели API), а
_build_summary читал task.input_data для search/plagiarism. Задача уходила
в бесконечные ретраи. Добавлен маппинг колонки + защита от NULL.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-07-23 19:16:13 +05:00
parent c1cf1ddd2f
commit 9ca2bd1742
2 changed files with 4 additions and 2 deletions

View File

@@ -68,10 +68,11 @@ def send_task_done(self, task_id: str) -> dict:
def _build_summary(task) -> str:
"""Сформировать краткое описание результата для email."""
result = task.result or {}
input_data = task.input_data or {}
if task.type == "search":
count = len(result.get("sources", []))
query = task.input_data.get("query", "")
query = input_data.get("query", "")
return (
f'Найдено <strong>{count} источников</strong> по запросу "{query[:80]}".'
f' Откройте результат, чтобы просмотреть список с ГОСТ-цитатами.'
@@ -81,7 +82,7 @@ def _build_summary(task) -> str:
similarity = result.get("overall_similarity", 0)
total = result.get("total_fragments", 0)
flagged = result.get("flagged_fragments", 0)
filename = task.input_data.get("filename", "")
filename = input_data.get("filename", "")
color = "#dc2626" if similarity > 30 else "#d97706" if similarity > 10 else "#16a34a"
label = "Высокий" if similarity > 30 else "Средний" if similarity > 10 else "Низкий"