fix(indexer): понятная ошибка, если загруженный "PDF" на самом деле не PDF
All checks were successful
Deploy / test (push) Successful in 2m41s
Deploy / deploy (push) Successful in 11s

Живой репорт: проверка плагиата упала с "Не удалось открыть PDF: code=7: no
objects found" — сырая внутренняя ошибка MuPDF. Разобрал файл из MinIO: это
HTML-страница (веб-интерфейс роутера D-Link DAP-400P), сохранённая с
расширением .pdf — 2049 байт, не PDF вообще. Система корректно отказалась
парсить мусор (это не баг пайплайна — реальный битый/не-PDF файл юзера), но
сообщение об ошибке было нечитаемым.

extract_text_from_pdf теперь проверяет magic-байты (%PDF-) ДО попытки
fitz.open() и даёт понятное "Файл повреждён или не является PDF-документом"
для этого частого случая; для настоящих PDF с внутренней порчей — прежнее
поведение (сырая ошибка MuPDF как detail, для диагностики).

4 юнит-теста (валидный PDF, HTML под видом PDF, пустые байты, битый заголовок
PDF). Тестов всего: 122 (было 118).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-08-24 18:55:24 +05:00
parent 712dc383ea
commit df2dfcc456
4 changed files with 50 additions and 1 deletions

View File

@@ -23,6 +23,12 @@ def extract_text_from_pdf(data: bytes) -> str:
"""
import fitz # PyMuPDF
# Частый случай: файл с расширением .pdf, но внутри — HTML/другое (например,
# сохранённая веб-страница). Даём понятное сообщение, а не сырую ошибку MuPDF
# вида "code=7: no objects found", которая ничего не скажет пользователю.
if not data.startswith(b"%PDF-"):
raise ValueError("Файл повреждён или не является PDF-документом")
try:
doc = fitz.open(stream=data, filetype="pdf")
except Exception as e: