Перейти к содержанию

Участие в проекте

EndoCore — молодой, сфокусированный проект. Вклады, сохраняющие его маленьким, безопасным и читаемым, очень приветствуются.

Настройка окружения

git clone https://github.com/Drakulyonok/endocore
cd endocore
python -m venv .venv && . .venv/bin/activate     # Windows: .venv\Scripts\activate
pip install -e ".[postgres,files,redis,celery,pydantic,watch]"
pip install pytest
pytest -q                                        # 1600+ тестов

Принципы, которые нужно уважать

  • У ядра одна зависимость (uvicorn). Новые возможности, требующие библиотеку, идут за опциональной экстрой и импортируются лениво.
  • Безопасность — умолчание. Значения в ORM всегда биндятся; идентификаторы валидируются и квотируются; lookup'ы — по белому списку. Никогда не собирайте SQL форматированием строк.
  • Endpoint'ы остаются тонкими. Логике место в сервисах.
  • Всё тестируется. Добавляйте тесты с каждым изменением; набор выполняется за секунды и использует SQLite in-memory.

Как запускать

pytest -q                       # все тесты
pytest tests/orm -q             # подмножество
py -3 benchmarks/bench.py       # бенчмарк диспатча
mkdocs serve                    # локальный предпросмотр документации

Стиль кода

  • Пишите как окружающий код — плотность комментариев, имена, идиомы.
  • Публичные функции получают однострочный docstring, объясняющий контракт.
  • В ядре предпочитайте решения из стандартной библиотеки.

Pull request'ы

  1. Для всего нетривиального сначала откройте issue с описанием изменения.
  2. Держите PR сфокусированным; одна забота на PR.
  3. Включайте тесты и, если изменение видно пользователю, — обновление документации и запись в CHANGELOG.md.
  4. Убедитесь, что pytest -q зелёный.

Что мы не примем

  • Что угодно, подставляющее значения в SQL без биндинга параметров.
  • Новые обязательные зависимости ядра.
  • Фичи, противоречащие философии — сомневаетесь — сначала откройте issue.

Сообщения об уязвимостях

Пожалуйста, не открывайте публичный issue для уязвимости. Сообщите о ней приватно мейнтейнеру (см. security policy репозитория), чтобы её можно было исправить до раскрытия.