# Quickstart: Async Backend Refactoring **Feature**: `032-translate-requests-httpx` **Date**: 2026-06-04 **Status**: ✅ Implemented ## Development Setup ```bash # 1. Убедиться, что ветка активна git branch --show-current # должен быть 032-translate-requests-httpx # 2. Активировать venv и установить новые зависимости cd backend source .venv/bin/activate pip install -r requirements.txt # 3. Новые dev-зависимости для тестирования pip install pytest-httpx pytest-asyncio # 4. Проверить текущее состояние тестов (до рефакторинга) python -m pytest -v --tb=short 2>&1 | tail -20 ``` ## Verification Commands ### Backend Tests (после каждого этапа рефакторинга) ```bash cd backend && source .venv/bin/activate # Все тесты python -m pytest -v # Только тесты затронутых модулей python -m pytest src/plugins/translate/ src/core/ src/api/routes/ -v # С coverage python -m pytest --cov=src --cov-report=term-missing # Конкретный тестовый файл python -m pytest src/plugins/translate/__tests__/test_executor.py -v python -m pytest src/core/utils/__tests__/test_network.py -v 2>/dev/null || echo "No tests yet" ``` ### Линтинг ```bash cd backend python -m ruff check . ``` ### Конкурентность (ручная проверка) ```bash # Терминал 1: запустить долгую операцию curl -X POST http://localhost:8000/translate/jobs/{job_id}/preview \ -H "Content-Type: application/json" \ -d '{"sample_size": 10}' # Терминал 2 (немедленно, пока preview выполняется): проверить схему curl -X POST http://localhost:8000/translate/check-target-schema \ -H "Content-Type: application/json" \ -d '{"environment_id": "...", "target_database_id": "...", "target_table": "..."}' # Терминал 3 (немедленно): легковесный запрос curl http://localhost:8000/health ``` ### Проверка на утечки соединений ```bash # После 500 запросов — проверить CLOSE_WAIT/TIME_WAIT: ss -tnp | grep -c CLOSE_WAIT # должно быть 0 lsof -i -P -n | grep python | wc -l # должно быть стабильно ``` ### Семантический аудит (после рефакторинга) ```bash # Перестроить индекс # (выполняется через Axiom MCP) axiom_semantic_index rebuild rebuild_mode="full" # Проверить контракты axiom_semantic_validation audit_contracts # Проверить belief-протокол axiom_semantic_validation audit_belief_protocol ``` ## Docker ```bash # Полный стек docker compose up --build # Только backend (для быстрой итерации) docker compose up --build backend db ``` ## New Dependencies Checklist - [ ] `pytest-httpx` добавлен в `requirements-dev.txt` или `pyproject.toml [dev]` - [ ] `aiofiles` добавлен в `requirements.txt` - [ ] `aiosmtplib` добавлен в `requirements.txt` - [ ] `httpx` — уже есть (0.28.1), проверить совместимость версии - [ ] Старые зависимости НЕ удаляются до завершения миграции всех тестов ## Порядок рефакторинга (Big-Bang) Рекомендуемый порядок изменений в рамках одного PR: 1. **`core/utils/`** — AsyncAPIClient + SupersetClientAuth + SupersetClientPaginated (новые файлы) 2. **`core/superset_client/`** — миграция _base.py + 13 миксинов на async 3. **`plugins/translate/`** — LLMHttpClient (новый), миграция executor, preview, run source 4. **`api/routes/`** — замена sync SupersetClient на async в detail_routes, translate routes 5. **`core/task_manager/`** — TaskManager, EventBus, TaskLifecycle async 6. **`plugins/backup.py`, `plugins/git_plugin.py`, `plugins/storage/`** — миграция на async 7. **`services/notifications/`** — провайдеры async 8. **`services/git/`** — Git-операции через asyncio.to_thread 9. **Тесты** — замена requests_mock на pytest_httpx во всех затронутых тестовых файлах 10. **Удаление** — Tombstone старых контрактов, удаление неиспользуемого sync-кода