Спасибо за интерес к проекту CurRate! Мы рады любому вкладу.
Этот проект следует Contributor Covenant Code of Conduct. Участвуя в проекте, вы соглашаетесь соблюдать его условия.
Если вы нашли ошибку:
- Проверьте, не была ли она уже зарегистрирована в Issues
- Если нет, создайте новое issue с:
- Четким описанием проблемы
- Шагами для воспроизведения
- Ожидаемым и фактическим поведением
- Версией Python и зависимостей
- Скриншотами (если применимо)
Для предложений новых функций:
- Проверьте, не было ли уже предложено в Issues
- Создайте issue с описанием:
- Проблемы, которую решает функция
- Предлагаемого решения
- Альтернативных решений (если есть)
- Fork репозитория
- Создайте ветку для вашей функции (
git checkout -b feature/amazing-feature) - Внесите изменения
- Добавьте тесты для новой функциональности
- Убедитесь, что все тесты проходят
- Закоммитьте изменения (см. Коммиты)
- Запушьте в вашу ветку (
git push origin feature/amazing-feature) - Откройте 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 символов
- Отделяйте тело от заголовка пустой строкой
- Объясняйте "что" и "почему", а не "как"
-
Обновление ветки: Убедитесь, что ваша ветка актуальна с
maingit checkout main git pull origin main git checkout feature/your-feature git rebase main
-
Проверка: Убедитесь, что:
- Все тесты проходят
- Покрытие кода не упало ниже 70%
- Pylint рейтинг не ниже 9.0/10
- Mypy без ошибок
- Код отформатирован Black
-
Описание PR: Включите:
- Описание изменений
- Связанные issues (если есть)
- Скриншоты (для изменений в GUI)
- Чеклист проверок
-
Review: После открытия PR, он будет проверен. Могут быть запрошены изменения.
Если у вас есть вопросы, создайте Issue или свяжитесь с автором проекта.
Спасибо за ваш вклад! 🎉