Skip to content

Latest commit

 

History

History
261 lines (187 loc) · 8.29 KB

File metadata and controls

261 lines (187 loc) · 8.29 KB

🤝 Руководство по внесению вклада

Спасибо за интерес к проекту CurRate! Мы рады любому вкладу.

📋 Содержание

Код поведения

Этот проект следует Contributor Covenant Code of Conduct. Участвуя в проекте, вы соглашаетесь соблюдать его условия.

Как внести вклад

🐛 Сообщения об ошибках

Если вы нашли ошибку:

  1. Проверьте, не была ли она уже зарегистрирована в Issues
  2. Если нет, создайте новое issue с:
    • Четким описанием проблемы
    • Шагами для воспроизведения
    • Ожидаемым и фактическим поведением
    • Версией Python и зависимостей
    • Скриншотами (если применимо)

💡 Предложения по улучшению

Для предложений новых функций:

  1. Проверьте, не было ли уже предложено в Issues
  2. Создайте issue с описанием:
    • Проблемы, которую решает функция
    • Предлагаемого решения
    • Альтернативных решений (если есть)

🔧 Pull Requests

  1. Fork репозитория
  2. Создайте ветку для вашей функции (git checkout -b feature/amazing-feature)
  3. Внесите изменения
  4. Добавьте тесты для новой функциональности
  5. Убедитесь, что все тесты проходят
  6. Закоммитьте изменения (см. Коммиты)
  7. Запушьте в вашу ветку (git push origin feature/amazing-feature)
  8. Откройте Pull Request

Процесс разработки

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

# 1. Fork и клонирование
git clone https://github.com/YOUR_USERNAME/CurRate.git
cd CurRate

# 2. Установка зависимостей
poetry install

# 3. Активация виртуального окружения
poetry shell

# 4. Создание ветки
git checkout -b feature/your-feature-name

Рабочий процесс

# Внесение изменений
# ... редактирование файлов ...

# Проверка кода
poetry run black src tests
poetry run pylint src/currate
poetry run mypy src/currate

# Запуск тестов
poetry run pytest

# Коммит
git add .
git commit -m "feat: Add amazing feature"

# Push
git push origin feature/your-feature-name

Стандарты кода

Форматирование

  • Используйте Black для форматирования кода
  • Максимальная длина строки: 88 символов (Black по умолчанию)
poetry run black src tests

Статический анализ

  • Pylint: Рейтинг должен быть не ниже 9.0/10
  • Mypy: Без ошибок типов
poetry run pylint src/currate
poetry run mypy src/currate

Документация

  • Все функции и классы должны иметь docstrings
  • Используйте Google style для docstrings
  • Комментарии на английском языке
  • Пользовательские сообщения на русском языке

Пример:

def convert(
    self,
    amount: float,
    from_currency: str,
    date: str
) -> Tuple[Optional[float], Optional[str]]:
    """
    Конвертирует валюту в рубли.

    Args:
        amount: Сумма для конвертации.
        from_currency: Исходная валюта (USD, EUR).
        date: Дата курса в формате DD.MM.YYYY.

    Returns:
        Tuple[float | None, str | None]: (результат в рублях, сообщение об ошибке).
    """

Тестирование

Требования

  • Покрытие кода должно быть не ниже 70%
  • Все новые функции должны иметь тесты
  • Тесты должны быть написаны до реализации (TDD подход приветствуется)

Запуск тестов

# Все тесты
poetry run pytest

# С покрытием
poetry run pytest --cov=src/currate --cov-report=term-missing

# Конкретный файл
poetry run pytest tests/test_currency_converter.py

# С verbose выводом
poetry run pytest -v

Написание тестов

  • Используйте понятные имена тестов
  • Один тест = одна проверка
  • Используйте фикстуры для повторяющихся данных
  • Мокайте внешние зависимости

Пример:

def test_convert_usd_success(mock_get_rate):
    """Тест успешной конвертации USD."""
    converter = CurrencyConverter(use_cache=False)
    mock_get_rate.return_value = 95.5
    
    result, error = converter.convert(100.0, "USD", "01.12.2024")
    
    assert result == 9550.0
    assert error is None

Коммиты

Формат коммитов

Используйте Conventional Commits:

<type>(<scope>): <description>

[optional body]

[optional footer]

Типы коммитов

  • feat: Новая функция
  • fix: Исправление ошибки
  • docs: Изменения в документации
  • style: Форматирование кода (не влияет на функциональность)
  • refactor: Рефакторинг кода
  • test: Добавление или изменение тестов
  • chore: Изменения в процессе сборки или вспомогательных инструментах

Примеры

feat(converter): Add support for GBP currency
fix(parser): Handle timeout errors correctly
docs(readme): Update installation instructions
test(cache): Add tests for LRU eviction
refactor(gui): Simplify date validation logic

Сообщения коммитов

  • Используйте императив, настоящее время ("Add feature" вместо "Added feature")
  • Первая строка не более 72 символов
  • Отделяйте тело от заголовка пустой строкой
  • Объясняйте "что" и "почему", а не "как"

Pull Request процесс

  1. Обновление ветки: Убедитесь, что ваша ветка актуальна с main

    git checkout main
    git pull origin main
    git checkout feature/your-feature
    git rebase main
  2. Проверка: Убедитесь, что:

    • Все тесты проходят
    • Покрытие кода не упало ниже 70%
    • Pylint рейтинг не ниже 9.0/10
    • Mypy без ошибок
    • Код отформатирован Black
  3. Описание PR: Включите:

    • Описание изменений
    • Связанные issues (если есть)
    • Скриншоты (для изменений в GUI)
    • Чеклист проверок
  4. Review: После открытия PR, он будет проверен. Могут быть запрошены изменения.

Вопросы?

Если у вас есть вопросы, создайте Issue или свяжитесь с автором проекта.


Спасибо за ваш вклад! 🎉