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:
@@ -25,6 +25,7 @@ class Task(Base):
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey("users.id"))
|
||||
type: Mapped[str] = mapped_column(String(20))
|
||||
status: Mapped[str] = mapped_column(String(20))
|
||||
input_data: Mapped[dict | None] = mapped_column(JSON, nullable=True)
|
||||
result: Mapped[dict | None] = mapped_column(JSON, nullable=True)
|
||||
error: Mapped[str | None] = mapped_column(Text, nullable=True)
|
||||
created_at: Mapped[datetime] = mapped_column(server_default=func.now())
|
||||
|
||||
@@ -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 "Низкий"
|
||||
|
||||
Reference in New Issue
Block a user