From 2d9089cbfbaedb84ef036351dd44bd41529b62ca Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 20 Sep 2026 15:17:49 +0300 Subject: [PATCH 1/2] fix(deps): mark the asyncpg floor per interpreter asyncpg declares requires-python >=3.9 throughout but ships no cp313 wheel before 0.30 and no cp314/cp314t before 0.31, so `asyncpg>=0.29` resolved to an sdist that cannot build on 3.13 and 3.14 rather than reporting a conflict. The floor was unsatisfiable on half the supported range. Marked rather than raised outright: 0.29 installs fine on 3.11 and 3.12. --- pyproject.toml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 13606d0..61305a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,15 @@ dependencies = [ ] [project.optional-dependencies] -asyncpg = ["asyncpg>=0.29"] +asyncpg = [ + # asyncpg declares requires-python >=3.9 throughout but ships no cp313 wheel before 0.30 and + # no cp314/cp314t before 0.31, so a resolver picks an sdist that cannot build rather than + # reporting a conflict. Marked, because 0.29 is fine on 3.11/3.12 and there is no reason to + # raise the floor for older interpreters. + "asyncpg>=0.29; python_version < '3.13'", + "asyncpg>=0.30; python_version == '3.13'", + "asyncpg>=0.31; python_version >= '3.14'", +] validate = ["alembic>=1.13"] fastapi = ["fastapi>=0.95"] prometheus = ["prometheus-client>=0.19"] @@ -39,7 +47,9 @@ dev = [ "pytest", "pytest-asyncio", "pytest-cov", - "asyncpg>=0.29", + "asyncpg>=0.29; python_version < '3.13'", + "asyncpg>=0.30; python_version == '3.13'", + "asyncpg>=0.31; python_version >= '3.14'", "alembic>=1.13", "fastapi>=0.95", "faststream[kafka]>=0.7.6,<0.8", From bc3c5dbc65879424f6c960b250fa9706f5a4443b Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 20 Sep 2026 15:23:29 +0300 Subject: [PATCH 2/2] fix(deps): raise the typing-extensions floor and declare pydantic's typing-extensions 4.12.0 is below pydantic's own requirement on 3.13+, so the lowest declared combination dragged pydantic back to a build whose pydantic-core has no cp313 wheel. pydantic itself reaches this package only through faststream, but its floor has to be declared anyway: pydantic-core ships no cp314 wheel before pydantic 2.12. With these the lowest declared combination installs on every supported interpreter. A stale sqlalchemy floor still breaks it at import on 3.13+. --- pyproject.toml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 61305a9..8ae9f5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,14 @@ classifiers = [ dependencies = [ "faststream>=0.7.6,<0.8", "sqlalchemy[asyncio]>=2.0", - "typing-extensions>=4.12.0", + # Not imported here: faststream pulls pydantic through fast-depends[pydantic]. Its floor has to + # be declared anyway, because pydantic-core ships no cp314 wheel before pydantic 2.12, so the + # lowest declared combination has no installable pydantic on 3.14. Marked, because 2.11 is fine + # everywhere else and there is no reason to raise the floor for older interpreters. + "pydantic>=2.12; python_version >= '3.14'", + # 4.12.2, not 4.12.0: pydantic requires >=4.12.2 on 3.13+, and pinning 4.12.0 drags pydantic + # back to a build whose pydantic-core has no cp313 wheel either. + "typing-extensions>=4.12.2", ] [project.optional-dependencies]