Совместимость зависимостей
Проверки охватывают закреплённое окружение разработки и отдельно разрешаемые нижние
и актуальные версии runtime-зависимостей. Поддерживаемые границы в pyproject.toml
задают согласованный набор для заявленных CPython 3.11–3.15. Каждый прогон создаёт
изолированное окружение и не меняет uv.lock.
Объявленные диапазоны
| Зависимость | Поддерживаемый диапазон | Назначение |
|---|---|---|
| Starlette | >=0.52.1,<2.0 |
Нижняя версия 0.x, актуальная 0.x и актуальная допустимая 1.x |
| Jinja2 | >=3.1.6,<4 |
Ядро |
| itsdangerous | >=2.2,<3 |
Подписанные сессии и ревизии |
| python-multipart | >=0.0.20,<1 |
Разбор форм |
| AnyIO | >=4.15.1,<5 |
Async/worker-выполнение на поддерживаемых Python |
| SQLAlchemy | >=2.0.52,<2.1 |
ORM и SQL reflection; включает поддержку Python 3.15 |
| SQLModel | >=0.0.27,<0.1 |
Явный extra sqlmodel, также входит в all |
| Tortoise ORM | >=0.25.4,<1.0 |
Совместимость с актуальным aiosqlite |
| Peewee | >=3.17,<4 |
Синхронный нативный адаптер |
| FastAPI | >=0.162,<1 |
Проверенная нижняя версия с текущими диапазонами Starlette |
| Litestar | >=2.20,<3 |
Проверенная нижняя версия для всего диапазона Python |
| GINO | >=1.0.1,<1.1 |
Отдельный extra gino-legacy |
| SQLAlchemy для GINO | >=1.3.24,<1.4 |
Изолирован от SQLAlchemy 2.x / SQLModel |
| asyncpg для GINO | >=0.32,<1 |
Проверенная нижняя версия драйвера для поддерживаемых Python |
SQLAlchemy 2.1, Tortoise 1.x и Peewee 4.x не входят в эти диапазоны. Latest означает
самые новые взаимно совместимые стабильные версии внутри объявленных диапазонов.
Транзитивные ограничения определяются метаданными зависимостей; отчёт сохраняет реальные
разрешённые версии. Проверяются согласованные окружения, а не все возможные сочетания версий.
Автоматические профили
Workflow совместимости зависимостей
запускается для push, pull request и вручную:
| Профиль | Python | Проверки |
|---|---|---|
minimum |
3.11 и 3.15 | Каждая объявленная runtime-зависимость современного набора закреплена на точной нижней границе; полный Python-набор |
latest |
3.11 и 3.15 | Новое разрешение с --upgrade; полный Python-набор |
starlette-0 |
3.12 | Новое разрешение со Starlette <1; полный Python-набор |
minimum --legacy |
3.11 и 3.15 | Точные нижние версии ядра, GINO и фреймворков, реальные контракты PostgreSQL 17 |
latest --legacy |
3.11 и 3.15 | Новое разрешение legacy-набора и те же контракты PostgreSQL |
Обычная закреплённая CI-матрица продолжает запускаться на каждой версии Python 3.11–3.15.
Профили выполняют uv pip check, сохраняют предупреждения об устаревших API как ошибки
и публикуют JSON разрешённых версий и JUnit XML в артефактах. Без URL тестовой базы
GINO прогон завершается ошибкой вместо успешного результата с пропущенными контрактами.
Наличие workflow не подтверждает успешный удалённый запуск: проверяйте статус и артефакты.
Локальные проверки описаны в матрице совместимости.
Локальные latest-профили, проверенные 2026-10-30, разрешились в Starlette 1.10.0,
SQLAlchemy 2.0.55, SQLModel 0.0.48, Tortoise 0.25.4, Peewee 3.19.0, FastAPI 0.162.0,
Litestar 2.25.0 и Pydantic 2.14.2. Отдельный профиль 0.x выбрал Starlette 0.52.1.
Это результаты на указанную дату; последующие прогоны могут выбрать более новые версии
внутри диапазонов.
Локальное воспроизведение
Из корня репозитория с доступными Python 3.11+ и uv 0.13.6+:
python scripts/test_compatibility.py --profile minimum --python 3.11 \
--report build/compatibility/minimum-3.11.json
python scripts/test_compatibility.py --profile latest --python 3.15 \
--report build/compatibility/latest-3.15.json
python scripts/test_compatibility.py --profile starlette-0 --python 3.12 \
--report build/compatibility/starlette-0.json
Временное окружение удаляется после выполнения. --environment PATH сохраняет его
в новом одноразовом каталоге для диагностики. Основное окружение и lockfile не меняются.
Инструменты тестирования и сборки разрешаются отдельно от нижних runtime-версий.
Для GINO создайте одноразовую локальную базу PostgreSQL quite_admin_gino_test:
QUITE_ADMIN_GINO_TEST_DATABASE_URL='postgresql://quite_admin:local-test-password@127.0.0.1:55432/quite_admin_gino_test' \
python scripts/test_compatibility.py --legacy --profile minimum --python 3.15 \
--report build/compatibility/gino-minimum-3.15.json
Ограничения тестовой базы описаны в настройке GINO и контрактах СУБД.
Проверки SQLModel
tests/sqlmodel определяет настоящие табличные классы SQLModel, наследование DTO,
изолированные registry и модели Relationship / промежуточных таблиц. Sync- и async-сессии
SQLAlchemy выполняют общие контракты: CRUD и rollback, фильтры/проекции, права,
формы FastAPI/Litestar, поиск связей с пагинацией, атомарное сохранение связей,
конкурирующие изменения и метаданные схемы. Отдельные тесты проверяют Python defaults,
UUID, Decimal, enum, JSON, строки AutoString и нетабличные Pydantic-схемы.
Набор выполняется в закреплённой матрице, современных профилях зависимостей и заданиях
PostgreSQL/MySQL. Тесты SQLModel/JSON используют Pydantic 2. SQLModel работает через
нативный адаптер SQLAlchemy; проверки Pydantic уровня приложения не запускаются
автоматически при записи из админки. Прикладные инварианты задавайте в parser, hooks
или сервисном адаптере.