yt-dlp-gui/requirements-dev.txt
codex-pve 2d2b138bbd Канонизация ссылок в ленте, эндпоинт /readyz и набор тестов
Канонизация. Один ролик теперь даёт одну запись: youtu.be/X,
youtube.com/watch?v=X и та же ссылка с тайм-кодом или списком
воспроизведения раньше считались тремя разными роликами, и счётчик
популярности размазывался. Заодно закрыта приватная проблема: из адреса
вырезаются метки перехода и всё похожее на секреты (token, api_key,
signature и прочее) — лента публичная, и публиковать чужой токен нельзя.
Уже накопленные записи приводятся к новому виду при старте, счётчики
схлопнувшихся строк складываются.

/readyz. Прежний /healthz отвечал «жив» даже при полном диске, мёртвом
уборщике, неработающей БД и отсутствующем ffmpeg. Новый эндпоинт
проверяет всё это плюс глубину очереди и возраст последнего прохода
уборщика, и при деградации отдаёт 503 — чтобы поломка была видна
мониторингу, а не только пользователям.

Тесты. 187 проверок, сеть не используется. Покрыты: селекторы форматов
(дословные эталоны плюс компиляция всех сочетаний самим yt-dlp),
валидация ссылок и SSRF, path traversal и символические ссылки, имена
файлов с кириллицей, отсев форматов с неизвестными кодеками, счётчики и
лента, HTTP-слой. В conftest пути принудительно уводятся во временный
каталог: импорт app создаёт менеджер, который подметает каталог загрузок,
и без этой предосторожности прогон тестов удалял файлы работающего
сервиса — так уже случалось.

Тесты сразу нашли две несогласованности, обе исправлены:
* отмена несуществующей задачи отвечала 409, хотя соседние ручки на ту же
  задачу отвечают 404;
* метки времени в ленте писались с точностью до секунды, поэтому порядок
  «недавних» среди записей одной секунды был произвольным.

Также объединены карты сообщений об ошибках: они дублировались в двух
ручках и успели разойтись — на одну и ту же ссылку /api/info отвечал
«Этот адрес недоступен», а /api/downloads глотал код и говорил «Плохая
ссылка».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwY2Cg54RK7WZdvMaLV5Di
2026-09-21 18:03:51 +03:00

3 lines
126 B
Text

# Зависимости для тестов. Сеть в прогоне не используется.
pytest
pytest-timeout