Совместимость зависимостей

Проверки охватывают закреплённое окружение разработки и отдельно разрешаемые нижние
и актуальные версии 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
или сервисном адаптере.