Files
iu 36e96cd519 feat(seed): add API test-data seeding script and make testdata target
- scripts/seed.py: stdlib HTTP client, JPEG+EXIF via optional Pillow (PNG fallback), additive-only, dry-run
- Makefile: testdata target with ALBUMS/PHOTOS/SEED/TIMEOUT and boolean flags
- README: usage section; new dev-seed-data capability spec
2026-10-11 13:27:21 +03:00

4.4 KiB
Raw Permalink Blame History

Tasks

1. Каркас CLI и HTTP-клиент

  • 1.1 Создать scripts/seed.py с разбором аргументов (--albums, --photos-per-album, --seed, --tags, --comments, --likes, --share-links, --invites, --wait-variants, --timeout, --dry-run) и чтением env (GALO_BASE_URL, GALO_EMAIL, GALO_PASSWORD); проверка — python3 scripts/seed.py --help работает без сторонних пакетов.
  • 1.2 Реализовать HTTP-клиент на urllib (JSON, multipart, Bearer, разбор {error:{code,message}}); проверка — обработка ошибочного ответа и сборка multipart-тела проверены на мок-данных.
  • 1.3 Реализовать вход через POST /api/auth/login и обработку ошибок (401, сеть) с ненулевым кодом; проверка — запуск с неверным паролем завершается ошибкой и не создаёт данных.

2. Генерация изображений

  • 2.1 Генерировать JPEG с EXIF (время съёмки, опционально GPS) через Pillow; проверка — в ответе GET /api/photos/:id в exif присутствует DateTimeOriginal.
  • 2.2 Добавить фолбэк PNG на стандартной библиотеке (zlib+struct) при отсутствии Pillow; проверка — при недоступной Pillow скрипт загружает PNG и фото появляется в списке.

3. Наполнение данными

  • 3.1 Создавать альбомы (POST /api/albums) и загружать фото (POST /api/albums/:id/photos, multipart) с меткой прогона; проверка — данные видны в GET /api/albums и GET /api/albums/:id/photos.
  • 3.2 Реализовать ожидание вариантов (--wait-variants): опрос GET /api/photos/:id до появления thumb_url с таймаутом; проверка — при работающем воркере ожидание завершается, при остановленном — сообщает таймаут без зависания.
  • 3.3 Реализовать опциональные сущности по флагам: теги (POST /photos/:id/tags), комментарии (POST /photos/:id/comments), лайки (POST /photos/:id/likes), share-ссылки (POST /albums/:id/share), инвайты (POST /albums/:id/invites); проверка — без флагов ничего лишнего не создаётся, с флагами сущности создаются.
  • 3.4 Добавить итоговый отчёт и режим --dry-run; проверка — сухой прогон не отправляет изменяющих запросов, а отчёт печатает фактическое число созданных сущностей.

4. Документация и интеграционная проверка

  • 4.1 Описать запуск, переменные окружения и параметры в README.md; проверка — задокументированный запуск наполняет локальный инстанс.
  • 4.2 Интеграционная проверка: прогнать скрипт с флагами против локального инстанса и убедиться в наличии альбомов, фото и вариантов, а также в сохранности существующих данных (только-добавление).

5. Make-цель

  • 5.1 Добавить цель testdata в Makefile, передающую параметры (ALBUMS, PHOTOS, SEED, TIMEOUT, булевы TAGS/COMMENTS/LIKES/SHARE/INVITES/WAIT/DRY, а также ARGS) в скрипт; проверка — make -n testdata ALBUMS=3 PHOTOS=4 TAGS=1 показывает ожидаемые флаги, make testdata DRY=1 печатает план без запросов, а make testdata ALBUMS=1 PHOTOS=1 создаёт данные.
  • 5.2 Описать make testdata в README.md; проверка — задокументированный запуск наполняет локальный инстанс.