За основу взят стиль, описанный в PEP8.
Отличия от PEP8 и общие правила оформления:
- Максимальная длина строки - 110 символов вместо 78.
- Используем двойные кавычки для строк (
"string"), не используем одинарные ('string'). - Добавляем аннотации типов.
- В случае длинных перечислений элементов коллекций или аргументов, после последнего аргумента добавляется запятая (для однородного автоформатирования).
- Докстринги всегда оформляем многострочно — см. раздел Докстринги.
Ниже приведены инструкции по настройке автоформатирования и code coverage из консоли. Для настройки интеграции с VSCode воспользуйтесь инструкцией.
Докстринг всегда многострочный, независимо от длины текста:
- после открывающих
"""на той же строке ничего не пишем — текст начинается со следующей строки; - закрывающие
"""стоят на отдельной строке.
# Плохо
def crc16(data: bytes) -> int:
"""Return the CRC-16/Modbus of *data* as a 16-bit int."""
# Хорошо
def crc16(data: bytes) -> int:
"""
Return the CRC-16/Modbus of *data* as a 16-bit int.
"""Текущий набор инструментов (black/isort/pylint) это правило не проверяет — соблюдается на ревью.
Для автоформатирования кода используется black и isort.
Для статической проверки кода используется pylint.
Что именно происходит на CI - можно посмотреть здесь (поискав по runPythonChecks; все скрипты берутся из codestyle).
В файле devcontainer.json версии расширений зафиксированы для совместимости с версиями наших инструментов.
В зависимости от вашего проекта, необходимо настроить virtualenv или devenv по инструкции для VSCode.
-
Pylint
$ python3 -m pylint $(../codestyle/python/ci/find-python-files) -
Black + isort (dry-run)
$ python3 -m black --config pyproject.toml --check --diff $(../codestyle/python/ci/find-python-files) $ python3 -m isort --settings-file pyproject.toml --check --diff $(../codestyle/python/ci/find-python-files)
-
Black + isort (автоформатирование)
$ python3 -m black --config pyproject.toml $(../codestyle/python/ci/find-python-files) $ python3 -m isort --settings-file pyproject.toml $(../codestyle/python/ci/find-python-files)
Для оценки покрытия кода тестами используется плагин pytest coverage. Оценка показывает процент выполнившихся строк кода относительно общего объема файлов, использованных в процессе тестирования.
Для запуска тестов необходимо настроить devenv по инструкции для VSCode.
В зависимости от того, как вы запускаете тесты, нужно использовать разные сценарии.
Минимально допустимое значение покрытия для прохождения тестов указывается в аргументе --cov-fail-under
-
Внутри devenv
$ pytest --cov --cov-config=.coveragerc --cov-report=term --cov-fail-under=<ЛИМИТ> -
Сборка wbdev (без настройки devenv)
Работает только для
wbdev ndebиwbdev cdeb$ export WBDEV_PYBUILD_TEST_ARGS="--cov --cov-config=../../../.coveragerc --cov-report=term --cov-fail-under=<ЛИМИТ>" $ wbdev ndeb
Для сборки внутри devenv есть возможность сгенерировать html отчет (для варианта wbdev сложные аргументы запуска, поэтому не приводим его). Для включения генерации нужно добавить опцию запуска
--cov-report=htmlВ папке проекта создастся папка htmlcov. Чтобы посмотреть отчет, откройте файл index.html в браузере.