Skip to content

Require Python 3.11 or later - #99

Open
febus982 wants to merge 1 commit into
mainfrom
chore/require-python-3.11
Open

Require Python 3.11 or later#99
febus982 wants to merge 1 commit into
mainfrom
chore/require-python-3.11

Conversation

@febus982

@febus982 febus982 commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Summary

Raises the minimum supported Python from 3.9 to 3.11.

Python 3.9 reached end of life in October 2025, and 3.10 is security-only until October 2026. Dropping both puts the floor on a version that stays fully supported for the remainder of this package's current cycle.

Changes

File Change
pyproject.toml requires-python = ">=3.11,<3.15", trove classifiers, mypy python_version, ruff target-version = "py311"
tox.ini dropped py39 and py310 from env_list
.github/workflows/python-tests.yml matrix ["3.11", "3.12", "3.13", "3.14"] — 6 jobs down to 4
README.md version badge
uv.lock regenerated

On the lock file diff

It is large (~1400 deletions) for two reasons, both mechanical:

  • Supporting 3.9 forced uv to keep dual resolutions for much of the dev toolchain — a modern version plus an older 3.9-compatible one (mypy 1.19.1/1.20.0, tox 4.30.3/4.52.0, and ~20 others). Those collapse to single entries.
  • Two compatibility shims drop out entirely, both stdlib from 3.11 onwards: exceptiongroup (ExceptionGroup/except*) and backports-asyncio-runner (asyncio.Runner). Both were transitive dev dependencies of pytest and pytest-asyncio; no source file imported them.

The lock was regenerated on top of #97, and pymdown-extensions is still pinned at 11.0.1 — that security fix is preserved.

Not included

No library code changes. The modules still use typing.Union / typing.Dict rather than PEP 604 and PEP 585 syntax. Ruff's UP ruleset is not enabled, so nothing flags it; modernising is left as separate work.

Verification

Full tox matrix green on this branch — py311, py312, py313, py314, typing, lint, format: 7/7 OK, 210 tests passing.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BJb27fB7d7HbQqfXc7U66V

Python 3.9 reached end of life in October 2025 and 3.10 is security-only
until October 2026. Dropping both raises the floor to a version that will
be fully supported for the remainder of this package's current cycle.

Update requires-python, trove classifiers, the mypy and ruff target
versions, the tox env list, the CI matrix and the README badge.

Regenerating the lock drops two compatibility shims that are part of the
standard library from 3.11 onwards, exceptiongroup and
backports-asyncio-runner, both pulled in transitively by pytest and
pytest-asyncio. Supporting 3.9 had also forced dual resolutions for much
of the dev toolchain; those collapse to single entries.

No library code changes. The modules still use typing.Union and
typing.Dict rather than PEP 604 and PEP 585 syntax; modernising them is
left as separate work.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJb27fB7d7HbQqfXc7U66V
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant