Skip to content

Commit 04e7125

Browse files
authored
feat: support Python 3.15 (#781)
* build: support Python 3.15 Raise the msgspec cap to <0.23 (0.22 is the first release with cp315 wheels), refresh the uv.lock pins that had no cp315 wheels, and add 3.15 to the CI matrices, classifiers, and installation docs. * no-mistakes(document): Drop stale Python version range from unit test README
1 parent fb7d5d3 commit 04e7125

6 files changed

Lines changed: 1054 additions & 723 deletions

File tree

‎.github/workflows/on-push.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ jobs:
113113
strategy:
114114
fail-fast: false
115115
matrix:
116-
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
116+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
117117
steps:
118118
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
119119

@@ -175,7 +175,7 @@ jobs:
175175
# declared dependencies, and touch every lazy export.
176176
# ---------------------------------------------------------------------------
177177
wheel-install-verify:
178-
name: Wheel-only install verify (declared deps, py3.10-3.14)
178+
name: Wheel-only install verify (declared deps, py3.10-3.15)
179179
runs-on: ubuntu-latest
180180
timeout-minutes: 25
181181
steps:
@@ -232,7 +232,7 @@ jobs:
232232
import pinecone._grpc
233233
print(f"OK {sys.version_info[:2]}: {len(names)} lazy exports, _grpc loaded")
234234
PY
235-
for v in 3.10 3.11 3.12 3.13 3.14; do
235+
for v in 3.10 3.11 3.12 3.13 3.14 3.15; do
236236
echo "::group::py${v}"
237237
uv python install "${v}"
238238
uv venv -p "${v}" "${RUNNER_TEMP}/venv-${v}"

‎.github/workflows/release-readiness.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,10 @@ jobs:
367367

368368
# ---------------------------------------------------------------------------
369369
# Multi-Python install verify: exercises the abi3 promise on every supported
370-
# Python version (3.10–3.14) using the dev wheel resolved above, which is
370+
# Python version (3.10–3.15) using the dev wheel resolved above, which is
371371
# always built from main regardless of what ref this workflow runs against
372372
# (#431) — read this job's result as "main's latest published wheel loads
373-
# its Rust extension and resolves its declared deps on py3.10-3.14", not as
373+
# its Rust extension and resolves its declared deps on py3.10-3.15", not as
374374
# signal about any other ref. The published wheel is cp310-abi3, so it must
375375
# install and load the Rust extension on each Python we claim to support.
376376
# ---------------------------------------------------------------------------
@@ -385,7 +385,7 @@ jobs:
385385
strategy:
386386
fail-fast: false
387387
matrix:
388-
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
388+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
389389
env:
390390
GCP_REGION: ${{ vars.GCP_REGION }}
391391
GCP_PROJECT_ID: ${{ vars.GCP_PROJECT_ID }}

‎docs/getting-started/installation.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Prerequisites
44

5-
- Python 3.10 or newer. Python 3.10 through 3.14 are tested and published for.
5+
- Python 3.10 or newer. Python 3.10 through 3.15 are tested and published for.
66
- A [Pinecone account](https://app.pinecone.io) and an API key. See
77
[Authentication](authentication.md) for where the SDK looks for it.
88

‎pyproject.toml‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ classifiers = [
2525
"Programming Language :: Python :: 3.12",
2626
"Programming Language :: Python :: 3.13",
2727
"Programming Language :: Python :: 3.14",
28+
"Programming Language :: Python :: 3.15",
2829
"Topic :: Database",
2930
"Topic :: Software Development",
3031
"Topic :: Software Development :: Libraries",
@@ -36,7 +37,9 @@ dependencies = [
3637
# drops symbols (e.g. httpx.BaseTransport) the SDK relies on. Without this
3738
# cap, `pip install --pre pinecone` resolves httpx to a broken pre-release.
3839
"httpx[http2]>=0.27,<1.0",
39-
"msgspec>=0.19,<0.22",
40+
# 0.22 is the first msgspec release with cp315 wheels; a lower cap makes
41+
# `pip install pinecone` on Python 3.15 build msgspec from source.
42+
"msgspec>=0.19,<0.23",
4043
"orjson>=3.11,<4",
4144
# Imported at module scope by pinecone/async_client/assistants.py for async
4245
# file IO. httpx happens to require it too, but every module the package

‎tests/unit/README.md‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ under `[tool.coverage.run]` / `[tool.coverage.report]`, so a bare `--cov`
2020

2121
## CI behavior
2222

23-
- Every matrix leg (`py3.10`–`py3.14`) runs with `--cov`, but only the
24-
`py3.12` leg posts a markdown table to the GitHub Actions job summary —
25-
posting it five times over would just be duplicate noise on the PR
26-
checks tab.
23+
- Every matrix leg runs with `--cov`, but only the `py3.12` leg posts a
24+
markdown table to the GitHub Actions job summary — posting it once per
25+
leg would just be duplicate noise on the PR checks tab.
2726
- There is **no failure threshold**. A floor set before there's real data
2827
on where coverage naturally sits gets gamed with tests that execute
2928
lines without asserting anything — worse than no signal. Revisit this

0 commit comments

Comments
 (0)