Skip to content

chore: drop Python 3.10 support for 4.3.0 - #274

Merged
lesnik512 merged 2 commits into
mainfrom
chore/drop-python-310
Nov 2, 2026
Merged

lesnik512 merged 2 commits into
mainfrom
chore/drop-python-310

Conversation

@lesnik512

@lesnik512 lesnik512 commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

Summary

Breaking, targeting 4.3.0: require Python 3.11 or newer. Python 3.10 applications should use that-depends<4.3; 4.2.1 is the latest compatible release when preparing this change. Python 3.10 reached upstream end of life on October 1, 2026 (the October 31 date in the issue is incorrect).

Closes #262.

Document that minor releases may drop end-of-life Python versions, while patches retain their minor series' Python floor. The Python API remains compatible on retained interpreters. Release 4.3.0 should put the breaking notice above at the top of its release notes; the tag-driven placeholder version remains unchanged in this PR.

Changes

  • Raise package metadata, both type checkers, lint CI and Read the Docs to Python 3.11; let Ruff infer its target from requires-python.
  • Remove Python 3.10 from the test and floors matrices, moving exact-floor coverage and its conditional branches to 3.11.
  • Use tomllib directly and remove the direct tomli dev requirement. Keep typing-extensions for APIs unavailable on 3.11/3.12.
  • Apply the new Python 3.11 Ruff findings: datetime.UTC, direct ISO timestamp parsing, and stdlib typing imports.
  • Document the support policy and 4.3.0 migration in Main decisions; link it from quickstart and include it in the generated LLM documentation.

Validation performed locally on macOS:

  • just lint-ci on Python 3.11: Ruff formatting/lint, strict mypy and pyrefly pass.
  • Full suite on Python 3.11–3.15 with both FastStream <0.6.0 and >=0.6.0: 458 tests pass in each of 10 combinations, with integrations required.
  • Workflow-equivalent floors checks on Python 3.11–3.14: 458 tests pass in each environment. Exact direct floors on 3.11; lowest direct versions with wheels on later versions.
  • Strict MkDocs build passes; support policy is present in llms-full.txt.
  • Wheel and source distribution build successfully; both declare Requires-Python >=3.11,<4, exclude the 3.10 classifier and retain typing-extensions. Installing the wheel on Python 3.10 is rejected as expected.
  • just adr-check and git diff --check pass.

The ignored uv.lock was regenerated locally. No new regression test is needed for this support-policy/configuration change; existing integration tests cover the lint-driven simplifications. Existing dependency deprecation warnings remain, and the build warns about the pre-existing unbounded uv_build requirement.

Checklist

  • Lint and format pass (ruff)
  • Type check passes (mypy and pyrefly)
  • Tests pass and new behavior is covered
  • Build succeeds (uv build) if packaging or build config changed
  • Docs updated if behavior or public API changed
  • Repo metadata stays consistent across the three surfaces (GitHub description, pyproject description, profile blurb) if this touches packaging

@codecov

codecov Bot commented Nov 2, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
tests/container.py 100.00% <100.00%> (ø)
tests/creators.py 100.00% <100.00%> (ø)
tests/integrations/fastapi/test_fastapi_di.py 100.00% <100.00%> (ø)
...ests/integrations/faststream/test_faststream_di.py 100.00% <100.00%> (ø)
...s/integrations/litestar/test_litestar_di_simple.py 100.00% <100.00%> (ø)
tests/providers/test_context_resources.py 100.00% <100.00%> (ø)
tests/providers/test_selector.py 100.00% <100.00%> (ø)
tests/test_packaging.py 100.00% <100.00%> (ø)
tests/test_typing.py 100.00% <100.00%> (ø)
that_depends/injection.py 100.00% <100.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@lesnik512
lesnik512 merged commit 3235c12 into main Nov 2, 2026
17 checks passed
@lesnik512
lesnik512 deleted the chore/drop-python-310 branch November 2, 2026 11:22
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.

Drop Python 3.10 on 2026-10-31

1 participant