Skip to content

Next Python SDK major - #5005

Draft
sentrivana wants to merge 251 commits into
masterfrom
major/3.0
Draft

sentrivana wants to merge 251 commits into
masterfrom
major/3.0

Conversation

@sentrivana

@sentrivana sentrivana commented Oct 24, 2025

Copy link
Copy Markdown
Contributor

We're preparing our next major on this branch.

The project is tracked in Linear. If you don't have access, we'll try to tag issues belonging to the project with the SDK 3.0 label on GitHub so that you can follow along.

Notable changes

  • Transaction-based tracing will be removed. Span streaming will be the default tracing model.
  • Python 3.6 support will be removed.

Context

You might have read this announcement about us discontinuing work on a 3.0. This is referring to the work done on the potel-base branch, which included two types of changes: a huge refactor of our tracing code on the one hand, and various unrelated changes, improvements and fixes on the other. We're dropping the huge refactor part, and only porting the rest, to a new branch and eventually a new 3.0 release.

@codecov

codecov Bot commented Oct 24, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.76%. Comparing base (14aff96) to head (d864ba0).
⚠️ Report is 4 commits behind head on master.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff             @@
##           master    #5005       +/-   ##
===========================================
+ Coverage   70.55%   83.76%   +13.21%     
===========================================
  Files         180      180               
  Lines       18077    18080        +3     
  Branches     3008     3009        +1     
===========================================
+ Hits        12754    15145     +2391     
+ Misses       4432     1943     -2489     
- Partials      891      992      +101     
Files with missing lines Coverage Δ
sentry_sdk/integrations/__init__.py 88.42% <100.00%> (+0.37%) ⬆️

... and 61 files with indirect coverage changes

@github-actions

github-actions Bot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊

66062 passed | ❌ 1 failed | ⏭️ 2999 skipped | Total: 69062 | Pass Rate: 95.66% | Execution Time: 191m 10s

📊 Comparison with Base Branch

Metric Change
Total Tests 📉 -66390
Passed Tests 📉 -62259
Failed Tests 📈 +1
Skipped Tests 📉 -4132

➕ New Tests (1)

View new tests
  • test_async_transport_rate_limiting_with_concurrency
    • File: tests.test_transport
    • Status: ❌ Failing

❌ Failed Tests

test_async_transport_rate_limiting_with_concurrency

File: tests.test_transport
Suite: py3.8-common
Error: AssertionError: assert False is True + where False = _check_disabled('error') + where _check_disabled = <sentry_sdk.transport.AsyncHttpTransport object at 0x7fd1dc5cb9d0>._check_disabled + where <sentry_sdk.transport.AsyncHttpTransport object at 0x7fd1dc5cb9d0> = <sentry_sdk.client._Client object at 0x7fd1ec2d21c0>.transport

Stack Trace
tests/test_transport.py:1037: in test_async_transport_rate_limiting_with_concurrency
    assert client.transport._check_disabled("error") is True
E   AssertionError: assert False is True
E    +  where False = _check_disabled('error')
E    +    where _check_disabled = <sentry_sdk.transport.AsyncHttpTransport object at 0x7fd1dc5cb9d0>._check_disabled
E    +      where <sentry_sdk.transport.AsyncHttpTransport object at 0x7fd1dc5cb9d0> = <sentry_sdk.client._Client object at 0x7fd1ec2d21c0>.transport

✅ Patch coverage is 90.09%. Project has 2075 uncovered lines.


Generated by Codecov Action

@github-actions

github-actions Bot commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

  • (logging) Separate ignore lists for events/breadcrumbs and sentry logs by sl0thentr0py in #5698

Bug Fixes 🐛

Anthropic

  • Set exception info on streaming span when applicable by alexander-alderman-webb in #5683
  • Patch AsyncStream.close() and AsyncMessageStream.close() to finish spans by alexander-alderman-webb in #5675
  • Patch Stream.close() and MessageStream.close() to finish spans by alexander-alderman-webb in #5674

Documentation 📚

  • Add note on AI PRs to CONTRIBUTING.md by sentrivana in #5696

Internal Changes 🔧

  • Add -latest alias for each integration test suite by sentrivana in #5706
  • Use date-based branch names for toxgen PRs by sentrivana in #5704
  • 🤖 Update test matrix with new releases (03/19) by github-actions in #5703
  • Add client report tests for span streaming by sentrivana in #5677

Other

  • Next Python SDK major by sentrivana in #5005
  • Update CHANGELOG.md by sentrivana in #5685

🤖 This preview updates automatically when you update the PR.

Comment thread sentry_sdk/consts.py
alexander-alderman-webb and others added 3 commits July 28, 2026 11:49
Add `UnraisablehookIntegration` to the default integrations list.
Stop raising exceptions `from None` in the ASGI and asyncio integrations.

Closes #5624
Remove everything hub related, including all sorts of compatibility
shims around hubs/scopes.

Also remove deprecated session methods.

`configure_scope` and `push_scope` removal coming in a future PR.

#### Issues
Closes #5001
The integration requires additional configuration which should be
intentional on the user's part.

#### Issues
Closes #4993
- Remove everything in `integrations/opentelemetry`
(`SentrySpanProcessor`, `SentryPropagator`, etc.)
- Remove associated test files and CI config
- Move old propagator functions and consts that we were using in
`OTLPIntegration` to the OTLP propagator directly
- Remove `instrumenter`

Note: `NoOpSpan` was not removed because it makes mypy blow up. Not
worth the effort as we'll anyway get rid of it when dropping transaction
based tracing.

#### Issues
Closes #6932
Comment thread sentry_sdk/integrations/otlp.py
### Description
The API is deprecated and slated for removal in 3.0.

#### Issues
Closes #5019

#### Reminders
- Please add tests to validate your changes, and lint your code using
`uv run ruff`.
- Add GH Issue ID _&_ Linear ID (if applicable)
- PR title should use [conventional
commit](https://develop.sentry.dev/engineering-practices/commit-messages/#type)
style (`feat:`, `fix:`, `ref:`, `meta:`)
- For external contributors:
[CONTRIBUTING.md](https://github.com/getsentry/sentry-python/blob/master/CONTRIBUTING.md),
[Sentry SDK development docs](https://develop.sentry.dev/sdk/), [Discord
community](https://discord.gg/Ww9hbqr)
### Description
Remove the deprecated API.

#### Issues
Closes #5018
…new major (#6948)

### Description
When `failed_request_status_codes` was first introduced, it accepted a
different format. The format was then changed, while the old format was
deprecated. Drop support for the old format now.

#### Issues
Closes #5017
### Description
Most of the entries in our extras list serve as a way to
communicate/enforce the lower boundary of the respective framework that
we support. This creates a parallel system to the version checks we
already have in each integration.

Some extras, however, define extra dependencies or specific extras that
are required for an integration to work correctly (e.g. the Flask
integration needs `blinker` to work properly). In that case, keep the
extra.

#### Issues
Closes #6259
Comment thread tests/integrations/django/asgi/test_asgi.py
sentrivana and others added 30 commits September 11, 2026 10:24
Remove tests testing implementation details of the old tracing system.
Adapt tests that still make sense in span streaming. Remove tests that
already have a streaming version.
These were all duplicated. Left the span streaming versions only.
- add `trace_lifecycle="stream"` to all tests that set a
`traces_sample_rate` or `traces_sampler`
- remove more duplicated tests
- switch all tracing API in tests to span streaming
- Remove `Span`s from type annotations in integrations
- Remove helpers like `set_on_span`, `set_span_data_attribute`


Taking at least some stuff out of
#7468 to make it more
reviewable
This time from tracing_utils.
- remove transaction events from tests (replace with other event types
if necessary)
- remove transaction helpers from conftest
- remove tests that assert on us emitting warnings if using incompatible
api (streaming/non-streaming)
- remove tests that test `_experiments`/top-level option precedence for
span streaming options (options not available in `_experiments` anymore)
- some args reformatting
…n` with `gen_ai.response.time_to_first_chunk` (#7472)
Replace all uses of `gen_ai.usage.input_tokens.cached` with `gen_ai.usage.cache_read.input_tokens`, all uses of `gen_ai.usage.input_tokens.cache_write` with `gen_ai.usage.cache_creation.input_tokens`, and all uses of `gen_ai.usage.output_tokens.reasoning` with `gen_ai.usage.reasoning.output_tokens`.
- Remove the `Span` and `Transaction` classes and associated types
- Remove transaction/old span support from transport, client, scope
- Rewire top-level API to `sentry_sdk.traces.*`
- Remove old span counting/reporting (`dropped_spans` etc.)
- Remove `has_span_streaming_enabled`
- ...and more

It's a big diff but no logic changes, just removing anything old span
related.

Closes
https://linear.app/getsentry/issue/PY-2654/rewire-top-level-tracing-api-to-span-streaming
Closes https://linear.app/getsentry/issue/PY-2655/remove-legacy-tracing
Closes
https://linear.app/getsentry/issue/PY-2653/remove-has-span-streaming-enabled-branches-from-core
This original message count is never set since truncation for GenAI spans was removed.
Rely only on cached properties on the `Request` instance to attach the request body to events.

Closes #7285
Closes #4827
Closes #4764
Remove last mention of `set_data` (it's commented out, but still). 

Closes https://linear.app/getsentry/issue/PY-1946/deprecatedrop-set-data
… present (#7493)

Use a boolean scope member to suppress chat generation spans from client libraries that are inside a chat generation span from an agent framework.
Add the `traces._AgentFrameworkChatGenerationContext` wrapper to ensure the scope member is reset when the agent framework span exits.

Remove logic that disables client library integrations when an agent library is active.
Delete the `integration_deactivation` tox environment that ran the corresponding tests.

Use the context manager in all agent frameworks that create chat generation spans (`langchain`, `pydantic-ai`, and `openai-agents`).
Add early returns for chat generation spans in the `openai`, `anthropic`, and `google-genai` client libraries to prevent duplicate generation spans.

Remove embedding patches from the `langchain` integration. These must now be provided by client libraries like `openai`, `anthropic`, etc.

Closes #5515
- remove `scope.transaction` (`set_transaction_name` remains for now;
changed all direct uses of `scope.transaction =` to use
`set_transaction_name` instead)
- remove more interop utils
(`_serialized_v1_attribute_to_serialized_v2_attribute` etc.)
- remove event processor-based transaction name setting (superseded by
`set_transaction_name` directly in patches)
- ...
- `Scope.streamed_span` -> `Scope.span`
- `StreamedSpan` -> `Span` (alias still kept for backwards compat)
- `NoOpStreamedSpan` -> `NoOpSpan` (alias still kept for backwards
compat)
- removed transaction tracing code from a test helper

The three hanging Web tests will be fixed in
#7511

Closes #7469
…spans (#7512)

Remove the response model from Invoke Agent spans because it is ambiguous for an agent that can call different models in the course of its execution.
…t spans (#7513)

Remove the response model from Invoke Agent spans because it is ambiguous for an agent that can call different models in the course of its execution.
Remove token attributes from Invoke Agent spans because it is ambiguous whether they include usage from tool calls.
Remove token attributes from Invoke Agent spans because it is ambiguous whether they include usage from tool calls.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants