yandex-music-api/CONTRIBUTING.md

5.2 KiB
Raw Blame 履歴

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

Внесение своего вклада в этот проект ничем не отличается внесения в других open source проекты на GitHub'e, но есть несколько ключевых моментов, о которых стоит знать и помнить.

Все необходимые пакеты для разработки есть в requirements-dev.txt. Установить их можно с помощью следующей команды:

pip install -r requirements-dev.txt

Основные типы вклада:

  • добавление новых полей к существующим классам;
  • добавление новых классов;
  • установка опциональности какого-то поля;
  • добавление нового метода в Client (новый запрос на API);
  • добавление примера использование в папку examples.

Ваш вклад может быть более грандиозным. Так, например, можно написать интеграционные тесты для класса Client и всех методов-сокращений в моделях. Написать тесты для класса запросов. Написать генератор кода для быстрого добавления новых полей.

Pull Requests

PR'ы должны быть сделаны в dev ветку. Определённого шаблона оформления нет. Если это закрывает какое-то issue, то стоит сослаться на него с ключевым словом "close". Например, "close #123". Обращайте внимание прошёл ли Ваш PR все проверки GitHub Actions (тесты, проверка стиля кода).

Тесты

Для тестирования используется pytest. На данный момент отсутствуют интеграционные тесты. Поэтому всё что сейчас требутеся — это юнит тесты классов-обёрток и их дополнительных методов (если имеются), которые не являются сокращениями для методов клиента.

Тесты модели должны покрывать 5 основных вещей: конструктор, десериализацию только обязательных полей, десериализацию всех полей, сравнение объектов модели, десериализацию пустого словаря. По необходимости десериализацию списка объектов.

Примеры доступны в папке tests.

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

Для документации используется Sphinx. Документация ведется в google style. К каждому классу и методу должна быть написана документация на русском языке. Типы каждого значения. По возможности описано предназначение поля. Если невозможно логически понять из названия — ставим TODO. Обязательно отмечаем какие поля являются опциональными. Пишем заметки по известным значениям полей, чтобы из контекста догадываться о предназначении.

Если добавлен новый класс, то не забудьте создать .rst файл в папке docs/source и добавить его в дерево нужного пакета.

Форматирование кода (стиль написания)

В проекте используется black. Не забывайте перед публикацией отформатировать код и проверить его на работоспособность.

Создание новых моделей

Исходите из логики при помещении модели в определённый пакет. Добавьте свою модель для короткого импорта в одну из секций __init__.py файла и пропишите название в __all__. Обязательно следите за тем, какие поля присутствуют всегда, а какие нет. По возможности минимизируйте количество опциональных полей. Не забывайте перечислить поля, по которым можно отличить один объект от другого в _id_attrs (метод __post_init__). Экземпляр класса Client передаётся в каждую модель для возможности написания методов-сокращений.