Python 3.15 integration parity tracker
This issue tracks bringing dd-trace-py integration coverage on Python 3.15
to parity with the 3.14 release. The list below is the inverse of the
dd-trace-py v3.16.0 release notes "still does not work with Python 3.14"
section — for 3.15 we expect the same set of items to be skipped until each
row's blocker is resolved.
How this works
- Each checkbox below should result in one independent PR.
The 3.14 migration followed the same pattern (see @emmettbutler's PR series linked at the bottom).
- Each unchecked checkbox below is also a real GitHub sub-issue (created via the task-list "convert to issue" option on each bullet). The parent checkbox auto-flips when the sub-issue closes. Rows already pre-checked (
- [x]) are already merged on main and don't need a sub-issue.
- To claim a row: click into the row's sub-issue (each
- [ ] bullet links to one), then either self-assign on that sub-issue page (top-right "Assignees" → "assign yourself") or leave a Taking this comment on the sub-issue itself and a maintainer will assign you. Don't claim on this parent tracker — comments here are ambiguous about which row and add noise.
- PRs that close a row should use the
python_315_bump
PR template (added in #17791; open via ?template=python_315_bump.md) and include Closes #<sub-issue-number> in the description.
That auto-closes the sub-issue on merge, which auto-flips the parent checkbox.
- Most rows are a one-line
riotfile.py max_version= bump + riot generate <suite> regen + lockfile commit. A few are real integration work and are called out below.
Tier A: wheel-build prerequisites
These must land before we can flip the cp315 wheel job from allow-fail to required. Scope is intentionally narrow — anything that can be skipped at runtime on 3.15 the way 3.14 skipped Profiling / IAST / ci_visibility (see dd-trace-py v3.16.0 release notes) lives in Tier B, not here.
Owned
Completed
Tier B: integration parity
Notes:
- None of these rows block the cp315 wheel cutover. They are integration-parity work that ships as each row lands, same model as the dd-trace-py v3.16.0 release notes' "still does not work with Python 3.14" list (those wheels still shipped). Each row failing only means that one integration / product is silently skipped on 3.15.
- All caps in
riotfile.py are at max_version="3.13" (not "3.14"). A volunteer PR must therefore do a 3.13 → 3.15 jump and validate the integration on both 3.14 and 3.15, then remove any # X doesn't yet work with Python 3.14 comments left over from previous iterations.
- A few rows are more nuanced than the dd-trace-py v3.16.0 release notes flatten them; see notes inline below.
Owned
Profiling — @DataDog/profiling-python
Frameworks / IDM — @DataDog/apm-idm-python
Needs an owner
LLM Observability — @DataDog/ml-observability
Most are blocked on tiktoken or protobuf cutting a 3.15 release; bump the upstream pin and regen the lockfile.
API SDK — @DataDog/apm-sdk-capabilities-python
Serverless — @DataDog/apm-serverless
CI Visibility — @DataDog/ci-app-libraries
ASM — @DataDog/asm-python
Data Streams — @DataDog/data-streams-monitoring
Completed
Non-goals (no action required for the py-315 migration itself)
The integrations below are explicitly out of scope for the 3.15 effort. They were already capped below 3.14
long before 3.15 came up, so flipping on cp315 wheels does not change anything for them.
They are listed here only as an opportunity for a future cleanup / deprecation initiative to happen independently
of the 3.15 cycle (all are likely owned by @DataDog/apm-idm-python / @DataDog/apm-core-python).
vertica (capped at 3.9) — already deprecated in dd-trace-py v3.16.0; on its way out.
bottle (capped at 3.10) — Bottle the framework is dormant upstream.
aredis (capped at 3.9) — library abandoned upstream; superseded by redis>=4.2.0.
yaaredis (capped at 3.10) — library abandoned upstream; superseded by redis>=4.2.0.
rediscluster (capped at 3.11) — redis-py-cluster superseded by native cluster support in redis>=4.2.0.
asynctest (capped at 3.9) — library obsoleted by stdlib unittest.IsolatedAsyncioTestCase in Python 3.8.
pynamodb (capped at 3.11) — test-harness incompat at 3.12+; orthogonal to 3.15 (fixing it would unblock 3.12-3.15 in one shot). Belongs in a general test-hygiene backlog.
If any of these turn out to need attention, file a separate issue —
don't reopen this tracker for them.
References
Python 3.15 integration parity tracker
This issue tracks bringing dd-trace-py integration coverage on Python 3.15
to parity with the 3.14 release. The list below is the inverse of the
dd-trace-py v3.16.0 release notes "still does not work with Python 3.14"
section — for 3.15 we expect the same set of items to be skipped until each
row's blocker is resolved.
How this works
The 3.14 migration followed the same pattern (see @emmettbutler's PR series linked at the bottom).
- [x]) are already merged onmainand don't need a sub-issue.- [ ]bullet links to one), then either self-assign on that sub-issue page (top-right "Assignees" → "assign yourself") or leave aTaking thiscomment on the sub-issue itself and a maintainer will assign you. Don't claim on this parent tracker — comments here are ambiguous about which row and add noise.python_315_bumpPR template (added in #17791; open via
?template=python_315_bump.md) and includeCloses #<sub-issue-number>in the description.That auto-closes the sub-issue on merge, which auto-flips the parent checkbox.
riotfile.pymax_version=bump +riot generate <suite>regen + lockfile commit. A few are real integration work and are called out below.Tier A: wheel-build prerequisites
These must land before we can flip the cp315 wheel job from
allow-failto required. Scope is intentionally narrow — anything that can be skipped at runtime on 3.15 the way 3.14 skipped Profiling / IAST /ci_visibility(see dd-trace-py v3.16.0 release notes) lives in Tier B, not here.Owned
lib-injection/sources/requirements.csv(analogue of #12283) #17813supported_versions_table.csv,supported_versions_output.json,requirements.csvfor 3.15 #17814Programming Language :: Python :: 3.15classifier topyproject.toml#17815tests/smoke_test.py,tests/lib-injection) green → flip cp315 wheel job fromallow-failto required #17816Completed
requires-python/ cp315 wheel allow-fail #17812Tier B: integration parity
Owned
Profiling —
@DataDog/profiling-pythonFrameworks / IDM —
@DataDog/apm-idm-pythonNeeds an owner
LLM Observability —
@DataDog/ml-observabilityMost are blocked on
tiktokenorprotobufcutting a 3.15 release; bump the upstream pin and regen the lockfile.llmobs(ragas test path) — re-pinragas#17827API SDK —
@DataDog/apm-sdk-capabilities-pythonServerless —
@DataDog/apm-serverlessCI Visibility —
@DataDog/ci-app-librariespytestintegration — real integration work #17839ASM —
@DataDog/asm-pythonData Streams —
@DataDog/data-streams-monitoringCompleted
Non-goals (no action required for the py-315 migration itself)
The integrations below are explicitly out of scope for the 3.15 effort. They were already capped below 3.14
long before 3.15 came up, so flipping on cp315 wheels does not change anything for them.
They are listed here only as an opportunity for a future cleanup / deprecation initiative to happen independently
of the 3.15 cycle (all are likely owned by
@DataDog/apm-idm-python/@DataDog/apm-core-python).vertica(capped at 3.9) — already deprecated in dd-trace-py v3.16.0; on its way out.bottle(capped at 3.10) — Bottle the framework is dormant upstream.aredis(capped at 3.9) — library abandoned upstream; superseded byredis>=4.2.0.yaaredis(capped at 3.10) — library abandoned upstream; superseded byredis>=4.2.0.rediscluster(capped at 3.11) —redis-py-clustersuperseded by native cluster support inredis>=4.2.0.asynctest(capped at 3.9) — library obsoleted by stdlibunittest.IsolatedAsyncioTestCasein Python 3.8.pynamodb(capped at 3.11) — test-harness incompat at 3.12+; orthogonal to 3.15 (fixing it would unblock 3.12-3.15 in one shot). Belongs in a general test-hygiene backlog.If any of these turn out to need attention, file a separate issue —
don't reopen this tracker for them.
References
python_315_bumpPR template — referenced from "How this works" above; the?template=python_315_bump.mdURL only resolves once this merges