Support Python 3.11 and 3.12#49
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Backport the PEP 695 type alias and typing.override via typing_extensions, lower requires-python to >=3.11, add 3.11/3.12 classifiers and ruff target. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A start_timeout that fires left the spawned _consume polling task running (add_task happens before the fail_after wait), since the caller never reaches __aexit__/stop. The orphan kept a Redis connection alive and deadlocked fixture/event-loop teardown on slow runners (observed as a hang in the new 3.11 CI leg; faster interpreters tore down before the orphan blocked). start() now cancels and awaits the poll task if the start signal times out, so a failed start leaves no orphan. Adds a deterministic regression test asserting no task leaks after a failed start. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lowers the supported-Python floor from 3.13 to 3.11. The package is pure-Python with no compiled extensions, so this is a source-compatibility + metadata change.
Why
Two source constructs were 3.12-only and broke on 3.11 (verified empirically on a real CPython 3.11.9 interpreter):
type RedisClient = ...(PEP 695 alias)configs.pySyntaxErroroverridefromtypingregistrator.py,broker.py,subscriber/usecase.pyImportErrorWhat changed
typing_extensions(declared as a direct runtime dependency,>=4.12.0to match faststream's existing transitive pin):@overridenow imports fromtyping_extensions; the PEP 695 alias becomesRedisClient: TypeAlias = ...(TypeAliasfrom stdlibtyping, valid since 3.10 — ruffUP035requires the stdlib form under apy311target).requires-python:>=3.13,<4→>=3.11,<4; added 3.11/3.12 classifiers; rufftarget-version→py311(so PEP 695 syntax can't reappear).3.11, 3.12, 3.13, 3.14(each leg shares the Redis service); lint job stays on 3.13.typing.Self(broker.py) anddatetime.UTC(response.py) both exist in the 3.11 stdlib — unchanged, and confirm 3.11 as the correct floor.Verification
just lint-ciclean (ruffpy311+ ty).Upstream deps (faststream, redis, anyio) all already declare
requires-python >=3.10, so no dependency blocked 3.11.🤖 Generated with Claude Code