Files
Web-Parser-Constructor/docs/verification.md
T
2026-10-01 00:28:16 +10:00

6.8 KiB
Raw Blame History

Проверка FastAPI-версии — 2026-10-01

Рабочий проект: P:\Coding\Python\NetologyWebParserSite.

Архитектура

Rio полностью удалён из кода приложения, pyproject.toml и uv.lock. Сервер — FastAPI; страницы — Jinja2, HTML и CSS; интерактивность — небольшие JavaScript-модули с HTTP-запросами. WebSocket не используется.

Кабинет поддерживает импорт CSV/JSON/JSONL, выбор вложенного массива JSON, настройку четырёх представлений, живой предпросмотр, сохранение черновика, публикацию и снятие версии. Обычные учебные страницы используют ссылочную пагинацию. Динамические страницы отдают первую порцию данных в HTML и поддерживают дозагрузку через JavaScript.

Хранилище SQLite, формат публикаций, учётные данные и адреса опубликованных страниц сохранены. Тесты работают с изолированными данными; рабочий .env не изменялся. Отдельно от тестов исправлен найденный черновик с точным содержимым примера questionnaires.json: две записи участников и автоматически настроенные анкеты. Прежний черновик сохранён в data/backups/b2cce4ed61034aaab20242c364c21924-revision-3.json; опубликованные версии и исходный файл не изменены.

Результаты

  • uv sync --locked: зависимости установлены, Rio отсутствует.
  • Полный pytest с LAB_BROWSER_TESTS=1, PLAYWRIGHT_CHANNEL=chrome: 49 passed, в том числе 14 реальных браузерных сценариев; 27,97 секунды.
  • Один сторонний warning: Starlette предупреждает о будущем переходе TestClient с httpx на httpx2. Ошибок тестов нет.
  • Импорт, предпросмотр, публикация, конфликт ревизий, замена исходника без изменения опубликованной версии, авторизация и CSRF проверены HTTP-тестами.
  • Браузер проверяет импорт CSV и вложенного JSON, настройку заполненных анкет, блокировку сохранения после неуспешной проверки файла, изменение подписей в предпросмотре и предупреждение о несохранённых изменениях.
  • Все четыре представления проверены парсерами и Chrome: 51 запись, дозагрузка, поиск, фильтры, отсутствие скрытых полей в публичных данных.
  • Переход «Parser Lab / Коллекции» и выход из кабинета проверены.
  • Единый favicon проверен на главной, входе, в кабинете и обоих типах учебных страниц.
  • Одинаковые размеры, шрифты, цвета и положение элементов обычной/динамической страницы проверены на ширине 1440 и 390 пикселей.
  • Снимки реального интерфейса кабинета и четырёх форматов проверены на настольном и мобильном экранах. Горизонтальная прокрутка широких таблиц остаётся внутри таблицы.
  • uv build: собраны sdist и wheel с HTML/CSS/JS, шрифтами и favicon.
  • Отдельное окружение uv sync --locked --no-dev --no-editable: установлен 21 пакет. Запуск установленного пакета, healthz, главная, вход, перенаправление из закрытого кабинета и статические ресурсы проверены без Rio и pytest.

Все проверки выполнялись на временных данных. Тестовые серверы остановлены.

Запуск

Из корня проекта:

uv sync --locked
uv run --locked --env-file .env python -m parser_lab

Если предыдущая версия ещё запущена, остановите её перед запуском новой. Повторно создавать .env и импортировать существующие данные не нужно.

Dockerfile и Compose сохранены. Сборка и запуск самого контейнера в этой среде не проверены, поскольку Docker недоступен. Проверена отдельная production-установка с теми же uv-зависимостями.

design-spec.md и implementation-plan.md помечены как архив первоначальной Rio-архитектуры. Актуальная инструкция — README.md.

Исправление импорта questionnaires.json

Браузерный сценарий загружает реальный examples/data/questionnaires.json, нажимает «Проверить файл» и «Сохранить и настроить», не выбирая вручную JSON-пути. Проверяются две анкеты A01/A02 и шесть исходных ответов: 8, Прогулка, true, 5, null, false. Импорт и редактор показывают отформатированные анкеты. Отдельный сценарий исправляет старый импорт целого документа кнопкой «Настроить анкеты автоматически», проверяет сохранение после перезагрузки и публикацию.

HTTP-проверки подтверждают независимость распознавания от имени файла, отказ от автоматического выбора при нескольких подходящих массивах, сохранение опубликованного снимка и исходника при исправлении, а также защиту от устаревшей ревизии. При неизвестной структуре остаётся ручной выбор полей.