Настройка окружения для разработки SatWave.
- Python 3.11+
- pip или poetry
- Git
- (Опционально) Docker для БД
# 1. Клонировать репозиторий
git clone https://github.com/Skriplss/SatWave-SaaS.git
cd SatWave-SaaS
# 2. Создать виртуальное окружение
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 3. Установить зависимости
pip install -r requirements.txt
# 4. Создать .env файл
cp .env.example .env
# 5. Запустить API
python -m satwave.main
# 6. Запустить Bot (в другом терминале)
python -m satwave.adapters.bot.telegram_botpython3.11 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt# Установить Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Создать окружение и установить зависимости
poetry install
# Активировать окружение
poetry shell# API
API_HOST=127.0.0.1
API_PORT=8000
DEBUG=true
LOG_LEVEL=DEBUG
# Telegram Bot
TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
# Database (опционально для начала)
DATABASE_URL=postgresql+asyncpg://satwave:satwave@localhost:5432/satwave
# Storage
PHOTO_STORAGE_TYPE=stub
PHOTO_STORAGE_BASE_URL=http://localhost:8000/photos
# ML
ML_MODEL_TYPE=stub
ML_MODEL_CONFIDENCE_THRESHOLD=0.5
# Deduplication
DUPLICATE_CHECK_THRESHOLD_METERS=50.0docker run --name satwave-db \
-e POSTGRES_USER=satwave \
-e POSTGRES_PASSWORD=satwave \
-e POSTGRES_DB=satwave \
-p 5432:5432 \
-d postgis/postgis:15-3.3brew install postgresql postgis
brew services start postgresql
createdb satwave
psql satwave -c "CREATE EXTENSION postgis;"- Открой
@BotFatherв Telegram - Отправь
/newbot - Следуй инструкциям
- Скопируй токен в
.env
Подробнее: Bot Setup
SatWave/
├── src/satwave/ # Исходный код
│ ├── core/ # Доменная логика
│ ├── adapters/ # Адаптеры
│ └── config/ # Конфигурация
├── tests/ # Тесты
│ ├── unit/
│ ├── integration/
│ └── fixtures/
├── docs/ # Документация
├── .env # Конфигурация (не в Git!)
├── requirements.txt # Зависимости
├── pyproject.toml # Настройки проекта
└── README.md
# Development с hot-reload
uvicorn satwave.adapters.api.app:create_app --reload --factory
# Или через main
python -m satwave.mainAPI будет доступен:
- http://localhost:8000
- http://localhost:8000/docs - Swagger UI
- http://localhost:8000/redoc - ReDoc
python -m satwave.adapters.bot.telegram_botИли через команду:
satwave-bot# Terminal 1
tmux new -s satwave
# Terminal 1: API
python -m satwave.main
# Terminal 2: Bot
tmux split-window -h
python -m satwave.adapters.bot.telegram_bot
# Переключение: Ctrl+B потом стрелка# Проверить код
ruff check src/ tests/
# Исправить автоматически
ruff check --fix src/ tests/
# Форматирование
ruff format src/ tests/mypy src/# Установить pre-commit
pip install pre-commit
# Создать .pre-commit-config.yaml
cat > .pre-commit-config.yaml << EOF
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.6
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
EOF
# Установить hooks
pre-commit install
# Теперь ruff будет запускаться перед каждым коммитомСм. Testing Guide
Установи расширения:
- Python (ms-python.python)
- Pylance (ms-python.vscode-pylance)
- Ruff (charliermarsh.ruff)
.vscode/settings.json:
{
"python.linting.enabled": true,
"python.linting.ruffEnabled": true,
"python.formatting.provider": "none",
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
},
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false
}- Settings → Project → Python Interpreter
- Выбери venv interpreter
- Settings → Tools → Python Integrated Tools
- Default test runner: pytest
- Settings → Editor → Inspections
- Включи все Python inspections
main- продакшн (всегда зеленая)dev- разработкаfeat/<scope>-<name>- новая функциональностьfix/<scope>-<name>- исправление
Используем Conventional Commits:
git commit -m "feat(api): add rate limiting to webhook endpoint"
git commit -m "fix(bot): handle empty photo data"
git commit -m "docs(readme): update installation instructions"Типы:
feat- новая функциональностьfix- исправлениеdocs- документацияtest- тестыrefactor- рефакторингperf- оптимизацияchore- инфраструктура
- Создай ветку от
dev - Сделай изменения
- Запусти тесты:
pytest - Запусти линтер:
ruff check --fix src/ tests/ - Коммит с Conventional Commits
- Push в ветку
- Создай PR в
dev
# Установи проект в editable mode
pip install -e .# Убить процесс на порту 8000
lsof -ti:8000 | xargs kill -9
# Или использовать другой порт
API_PORT=8001 python -m satwave.main# Проверь PYTHONPATH
echo $PYTHONPATH
# Добавь src/ в PYTHONPATH (или используй pip install -e .)
export PYTHONPATH="${PYTHONPATH}:$(pwd)/src"- Проверь токен в
.env - Убедись, что скрипт запущен
- Отправь
/startзаново - Проверь логи (LOG_LEVEL=DEBUG)
# Запустить конкретный тест
pytest tests/unit/test_models.py::test_location_validation
# Запустить с coverage
pytest --cov=satwave --cov-report=html
# Очистить кеш
find . -type d -name __pycache__ -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
# Обновить зависимости
pip list --outdated
pip install --upgrade package_name