Участие в разработке
Приветствуем вклад в Django-Chassis. Это руководство покрывает локальный процесс разработки, тестов и документации.
Если не уверены, подходит ли изменение проекту, сначала откройте issue или черновик pull request.
Держите изменения сфокусированными и добавляйте тесты, когда меняется поведение.
Настройка окружения
Проект использует uv для управления Python-зависимостями. Установка —
в официальном
руководстве uv.
После клонирования репозитория установите зависимости:
uv sync --group dev
Линтинг
uv run ruff check .
uv run pyrefly check
uv run pytest tests/test_source_conventions.py -q
Ruff проверяет и пакет, и набор тестов. Ограничивайте исключения правил самым
узким подходящим файлом или путём и документируйте, какой контракт фреймворка
их требует. Настроенные кириллические confusables поддерживают русские UI-строки
и docstrings без отключения проверок RUF001–RUF003.
B009 и B010 отключены, поскольку интеграции Django обоснованно читают и
добавляют динамические атрибуты объектов фреймворка через getattr() и
setattr(); требование прямого доступа вынуждало бы создавать искусственные
протоколы только ради проверки типов.
Pyrefly проверяет django_chassis со strict preset и минимальной поддерживаемой
версией Python. Отключены стилистические правила missing-override-decorator и
implicit-any-lambda. Правило implicit-any-attribute отключено, чтобы
сохранять присваивания в Django-классах Meta моделей без аннотаций;
несовместимые сигнатуры методов остаются ошибками через bad-override.
Тесты
uv run pytest
Тестовый pipeline GitHub Actions запускает linting и строгую проверку типов на Python 3.13, затем полный набор тестов на Python 3.13 и 3.14. Задачи матрицы не останавливаются после первого сбоя, поэтому каждая поддерживаемая версия Python выдаёт свой результат.
Работа с документацией
Документация собирается Docusaurus. Сайт
двуязычный (английский источник, русские зеркала) и не версионируется.
Публичный API помечается бейджами <Since v="x.y.z" />.
cd docs
npm install
npm run docs:dev
Английский — локаль по умолчанию на /. Русский — i18n-расширение на /ru/.
docs:dev отдаёт английский на порту 3000, русский на 3001 (под /ru/) и
проксирует /ru с английского сервера, чтобы переключатель языка работал.
Если нужен переключатель языка, запускайте docs:dev, а не один
docs:dev:ru.
npm run docs:build
npm run docs:serve
Бейджи версий
Любой новый публичный option, компонент, страница, настройка или extra должен быть помечен в обоих языках:
<Since v="1.1.0" />
Изменения поведения или сигнатуры — <Changed v="..." /> и запись в
CHANGELOG.md. Версия бейджа — версия пакета, в которой фича впервые
вышла, а не версия документации.
Соглашения проекта
- Полная типизация — аннотируйте каждый параметр функции, возвращаемое
значение и переменную, кроме атрибутов внутри Django-классов
Metaмоделей. Проект целится в строгий режимpyrefly. Runtime-классы Django, которые не поддерживают параметризацию, напримерFieldиModelAdmin, остаются непараметризованными в аннотациях. - Без относительных импортов — всегда абсолютные
(
from django_chassis.mixins import ChassisAdminMixin). - Именованные аргументы — передавайте аргументы по ключу, где возможно.
- Сигнатуры функций — если сигнатура не помещается в одну строку, переносите каждый параметр на отдельную строку.
- Завершающие запятые — не оставляйте необязательную запятую после последнего
параметра, аргумента или элемента коллекции. Ruff formatter отключён, потому
что он требует запятые в многострочных коллекциях. Поддерживаемые случаи
проверяет
COM819, а многострочный синтаксис — source-conventions checker. - Форматирование — не запускайте
ruff format; для автоматических проверок стиля используйтеuv run ruff check .. - Миграции — никогда не редактируйте и не переписывайте механически файлы в
Django-каталогах
migrations. Они глобально исключены из pre-commit, Ruff, Pyrefly и source-conventions проверок. - Импорты —
I001отключено, поскольку isort требует завершающие запятые в многострочных блоках импортов. Проверка абсолютных импортов остаётся включена. - Lambda-выражения — сохраняйте компактные lambda; не заменяйте их именованными функциями или прямыми ссылками только ради линтера или типизации.
- Директивы noqa — сохраняйте существующие комментарии
# noqa; не удаляйте и не переписывайте добавленные сопровождающим исключения без прямого указания. - Менеджеры моделей — объявляйте Django-классы
ManagerиQuerySetвdjango_chassis.models.managers, а не в модулях моделей. - Метаданные Django-моделей — используйте обычные присваивания внутри
классов
Metaмоделей; не добавляйте аннотации типов, в том числе кdefault_permissions = (). Это правило контролирует source-conventions checker; правило Pyreflyimplicit-any-attributeотключено, чтобы оно не требовало аннотацию для пустого кортежа. - Имена классов — не создавайте классы с
_в начале имени без явного разрешения сопровождающего; используйте содержательное публичное имя. uv run— Python-команды какuv run pytest, не голыйpython.optionsостаётсяoptions— не переименовывайте атрибут ModelAdmin.- Порядок миксинов —
ChassisAdminMixin/ChassisAdminSiteMixinперед классом Django. - Порядок
INSTALLED_APPS—'django_chassis'перед'django.contrib.admin'. - Английская и русская документация остаются синхронными.
- Изменения публичного API требуют записи в
CHANGELOG.md.