Next Python SDK major - #5005
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 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
|
Codecov Results 📊✅ 110309 passed | ❌ 2 failed | ⏭️ 5424 skipped | Total: 115735 | Pass Rate: 95.31% | Execution Time: 379m 48s 📊 Comparison with Base Branch
➕ New Tests (2)View new tests
❌ Failed Tests
|
Semver Impact of This PR⚪ None (no version bump detected) 📋 Changelog PreviewThis is how your changes will appear in the changelog. New Features ✨
Bug Fixes 🐛Anthropic
Documentation 📚
Internal Changes 🔧
Other
🤖 This preview updates automatically when you update the PR. |
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
### 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
### 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
The renovate regex manager is configured to use GitHub tags. The `getsentry/codecov-action` action was previously not updated in `test_orchestrator.jinja`.
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [anthropics/claude-code-action](https://redirect.github.com/anthropics/claude-code-action) | action | patch | `v1.0.191` → `v1.0.201` | | [astral-sh/setup-uv](https://redirect.github.com/astral-sh/setup-uv) | | patch | `v10.0.0` → `v10.0.1` | | [astral-sh/setup-uv](https://redirect.github.com/astral-sh/setup-uv) | action | patch | `v10.0.0` → `v10.0.1` | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/6715) for more information. --- ### Release Notes <details> <summary>anthropics/claude-code-action (anthropics/claude-code-action)</summary> ### [`v1.0.201`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.201) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.200...v1.0.201) **Full Changelog**: <anthropics/claude-code-action@v1.0.200...v1.0.201> ### [`v1.0.200`](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.199...v1.0.200) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.199...v1.0.200) ### [`v1.0.199`](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.198...v1.0.199) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.198...v1.0.199) ### [`v1.0.198`](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.197...v1.0.198) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.197...v1.0.198) ### [`v1.0.197`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.197) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.196...v1.0.197) #### What's Changed - fix: neutralize the checkout credential under actions/checkout v6+ include layout ([#​1510](https://redirect.github.com/anthropics/claude-code-action/issues/1510)) by [@​TemRevil](https://redirect.github.com/TemRevil) in [#​1526](https://redirect.github.com/anthropics/claude-code-action/pull/1526) #### New Contributors - [@​TemRevil](https://redirect.github.com/TemRevil) made their first contribution in [#​1526](https://redirect.github.com/anthropics/claude-code-action/pull/1526) **Full Changelog**: <anthropics/claude-code-action@v1.0.196...v1.0.197> ### [`v1.0.196`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.196) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.195...v1.0.196) ##### What's Changed - fix(security): unify secret redaction in public comment outputs by [@​Juwan-Hwang](https://redirect.github.com/Juwan-Hwang) in [#​1693](https://redirect.github.com/anthropics/claude-code-action/pull/1693) - fix: strip unused ALL\_INPUTS environment variable from Claude subprocess env by [@​Juwan-Hwang](https://redirect.github.com/Juwan-Hwang) in [#​1692](https://redirect.github.com/anthropics/claude-code-action/pull/1692) - fix(github): match bot actors in comment filters using GraphQL \_\_typename by [@​Neal006](https://redirect.github.com/Neal006) in [#​1616](https://redirect.github.com/anthropics/claude-code-action/pull/1616) ##### New Contributors - [@​Juwan-Hwang](https://redirect.github.com/Juwan-Hwang) made their first contribution in [#​1693](https://redirect.github.com/anthropics/claude-code-action/pull/1693) **Full Changelog**: <anthropics/claude-code-action@v1.0.195...v1.0.196> ### [`v1.0.195`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.195) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.194...v1.0.195) **Full Changelog**: <anthropics/claude-code-action@v1.0.194...v1.0.195> ### [`v1.0.194`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.194) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.193...v1.0.194) #### What's Changed - Harden delete\_files MCP tool: validate paths within repo root (consistency with commit\_files) by [@​GabrielOnRails](https://redirect.github.com/GabrielOnRails) in [#​1636](https://redirect.github.com/anthropics/claude-code-action/pull/1636) - Only limit fetch depth when the checkout is already shallow by [@​winklemad](https://redirect.github.com/winklemad) in [#​1647](https://redirect.github.com/anthropics/claude-code-action/pull/1647) - fix(base-action): add \~/.local/bin to $GITHUB\_PATH after auto-install by [@​anishesg](https://redirect.github.com/anishesg) in [#​1643](https://redirect.github.com/anthropics/claude-code-action/pull/1643) - feat(context): include diffHunk in PR review comment context by [@​rishavnaskar](https://redirect.github.com/rishavnaskar) in [#​1584](https://redirect.github.com/anthropics/claude-code-action/pull/1584) - ci: skip Claude-backed test jobs on fork PRs by [@​ashwin-ant](https://redirect.github.com/ashwin-ant) in [#​1655](https://redirect.github.com/anthropics/claude-code-action/pull/1655) - fix: bump shell-quote to 1.8.4 to remediate CVE-2026-9277 by [@​doshidhaval](https://redirect.github.com/doshidhaval) in [#​1557](https://redirect.github.com/anthropics/claude-code-action/pull/1557) - fix(images): bound attachment downloads by [@​abhinavkr26104](https://redirect.github.com/abhinavkr26104) in [#​1625](https://redirect.github.com/anthropics/claude-code-action/pull/1625) #### New Contributors - [@​GabrielOnRails](https://redirect.github.com/GabrielOnRails) made their first contribution in [#​1636](https://redirect.github.com/anthropics/claude-code-action/pull/1636) - [@​winklemad](https://redirect.github.com/winklemad) made their first contribution in [#​1647](https://redirect.github.com/anthropics/claude-code-action/pull/1647) - [@​doshidhaval](https://redirect.github.com/doshidhaval) made their first contribution in [#​1557](https://redirect.github.com/anthropics/claude-code-action/pull/1557) **Full Changelog**: <anthropics/claude-code-action@v1.0.193...v1.0.194> ### [`v1.0.193`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.193) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.192...v1.0.193) **Full Changelog**: <anthropics/claude-code-action@v1.0.192...v1.0.193> ### [`v1.0.192`](https://redirect.github.com/anthropics/claude-code-action/releases/tag/v1.0.192) [Compare Source](https://redirect.github.com/anthropics/claude-code-action/compare/v1.0.191...v1.0.192) #### What's Changed - fix(mcp): paginate GitHub Actions results by [@​abhinavkr26104](https://redirect.github.com/abhinavkr26104) in [#​1629](https://redirect.github.com/anthropics/claude-code-action/pull/1629) - fix(summary): keep every text block in structured tool results by [@​Neal006](https://redirect.github.com/Neal006) in [#​1619](https://redirect.github.com/anthropics/claude-code-action/pull/1619) - fix(mcp): detect binary files by content instead of extension allowlist by [@​henriquepe](https://redirect.github.com/henriquepe) in [#​1633](https://redirect.github.com/anthropics/claude-code-action/pull/1633) #### New Contributors - [@​abhinavkr26104](https://redirect.github.com/abhinavkr26104) made their first contribution in [#​1629](https://redirect.github.com/anthropics/claude-code-action/pull/1629) - [@​Neal006](https://redirect.github.com/Neal006) made their first contribution in [#​1619](https://redirect.github.com/anthropics/claude-code-action/pull/1619) - [@​henriquepe](https://redirect.github.com/henriquepe) made their first contribution in [#​1633](https://redirect.github.com/anthropics/claude-code-action/pull/1633) **Full Changelog**: <anthropics/claude-code-action@v1.0.191...v1.0.192> </details> <details> <summary>astral-sh/setup-uv (astral-sh/setup-uv)</summary> ### [`v10.0.1`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v10.0.1): 🌈 Tolerate transient manifest timeouts [Compare Source](https://redirect.github.com/astral-sh/setup-uv/compare/v10.0.0...v10.0.1) ##### Changes Thank you [@​arguile-](https://redirect.github.com/arguile-) for making this action more resilient. ##### 🐛 Bug fixes - Tolerate transient manifest timeouts [@​arguile-](https://redirect.github.com/arguile-) ([#​1016](https://redirect.github.com/astral-sh/setup-uv/issues/1016)) ##### 🧰 Maintenance - chore: update known checksums for 0.12.4 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​1017](https://redirect.github.com/astral-sh/setup-uv/issues/1017)) ##### 📚 Documentation - docs: update version references to v10.0.0 @​[github-actions\[bot\]](https://redirect.github.com/apps/github-actions) ([#​1014](https://redirect.github.com/astral-sh/setup-uv/issues/1014)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/getsentry/sentry-python). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yNC4wIiwidXBkYXRlZEluVmVyIjoiNDQuMzkuMCIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…#7201) The sync request/response handler passed the _isolation_ scope to `_set_transaction_name_and_source`, but the transaction/segment span lives on the _current_ scope. As a result the route-resolved name never reached the span for sync endpoints, which were instead named by the raw URL from the ASGI middleware (`transaction_info.source` of `url` rather than `route`). Async handlers already used the current scope and were unaffected. Pass the current scope (already computed above) so sync and async handlers behave identically: - streaming: the segment name / `sentry.segment.name.source` are route-based - static: the transaction event name / source are route-based For parametrized routes this also removes high-cardinality URL transaction names for sync endpoints. Found while working on #7183.
The options were deprecated with 2fef9bc.
### Description The timeout in the AWS Lambda (and GCP, by extension) timeout warning is wrong, remove it and slightly rephrase. This is on the new major branch since it breaks grouping. (Even just removing the number from the original message, without modifying it further, causes regrouping. Since that's the case I took the liberty to update the message a bit more.) Original POTel PR: #4671 #### Issues Closes https://linear.app/getsentry/issue/PY-1937/change-aws-lambda-timeout-message #### 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)
Originally raised by a bot [here](#5005 (comment)): the `parse_version` function parses version strings as is (e.g. 3.1 becomes `(3, 1)`). We use these parsed version tuples in integrations to compare the installed version against the minimum (defined in `integrations/__init__.py`). The minimum versions are often three-part, e.g. `(3, 1, 0)`. This means that we can mistakenly consider a valid version to be below the minimum, because in pure tuple terms, `(3, 1) < (3, 1, 0)` is true. This can also happen in reverse (package version has three parts, while our min version boundary has two). In this PR, we make the internal version comparison work as expected regardless of mismatches in the length of the version strings/tuples.
| with sentry_sdk.traces.start_span( | ||
| name="unknown arq task", | ||
| status="ok", | ||
| op=OP.QUEUE_TASK_ARQ, | ||
| source=TransactionSource.TASK, | ||
| origin=ArqIntegration.origin, | ||
| ) | ||
|
|
||
| with sentry_sdk.start_transaction(transaction) as span: | ||
| attributes={ | ||
| "sentry.op": OP.QUEUE_TASK_ARQ, | ||
| "sentry.origin": ArqIntegration.origin, | ||
| "sentry.segment.name.source": SegmentNameSource.TASK, | ||
| SPANDATA.MESSAGING_MESSAGE_ID: job_id, | ||
| }, | ||
| parent_span=None, | ||
| ) as span: | ||
| if self.queue_name is not None: | ||
| span.set_data(SPANDATA.MESSAGING_DESTINATION_NAME, self.queue_name) | ||
| span.set_attribute( | ||
| SPANDATA.MESSAGING_DESTINATION_NAME, self.queue_name | ||
| ) | ||
| return await old_run_job(self, job_id, score) |
There was a problem hiding this comment.
Failed ARQ task spans keep status ok under span streaming
After switching run_job to streamed spans, _capture_exception still only sets status via scope.transaction, which is always None in streaming mode—so failed task segments stay ok unless the exception happens to escape ARQ. Update _capture_exception to set scope.streamed_span.status (as Celery does) and assert error status in the failure tests.
Evidence
- This hunk makes
traces.start_span(..., parent_span=None)the only task path in_sentry_run_job. _capture_exceptionstill doesif scope.transaction is not None: scope.transaction.set_status(...).- In streaming mode,
Scope.transactionreturnsNone, so that status update is a no-op. - ARQ job failures are typically handled inside
Worker.run_job, so the streamed span__exit__often never sees the exception to markerroritself. - Celery already maps this via
scope.streamed_span.status; ARQ tests assert failure events but not task-span status.
Identified by Warden · code-review, find-bugs · LZ3-SDG
### Description Getting rid of custom APIs. `update_current_span` never worked with span streaming anyway. #### Issues Part of https://linear.app/getsentry/issue/PY-2623/drop-custom-apis Part of #6894 #### 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 Many of the `set_tag` calls were only present in non-span-streaming branches, which will be completely removed anyway, and we've already migrated those tags, if applicable, to span attributes in the scope of span first. #### Issues Closes https://linear.app/getsentry/issue/PY-1940/remove-tags-auto-set-by-the-sdk
### Description Get the logging integration into shape now that Sentry Logs is a first-class feature. The idea is to make Logs the primary feature the integration offers, with capturing events an optional add-on. High-level overview of the changes: - The integration has to be **enabled explicitly** by the user. It's not auto-enabled anymore. - **Sentry logs related options and features get more generic sounding names**. - For instance, `level` (before: `sentry_logs_level`), `ignore_logger` (before: `ignore_logger_for_sentry_logs`) now set the Sentry logs level and Sentry logs denylist, respectively. - Existing secondary features with previously generic names get specialized names (`level` -> `breadcrumb_level`, `ignore_logger` -> `ignore_logger_for_events`). - **Capturing Sentry logs is on by default** when the integration is enabled. - **Event capture is off by default**, but can be turned on via an option. Breadcrumb capture is still on by default. - The **`capture_sentry_logs` option is gone completely**. Since logs instrumentation is now on by default, and the `level` option exists, it was superfluous. Capturing logs can still be opted out of by setting `level=None`. Collateral: - Updated unrelated tests that were implicitly relying on default behavior of the logging integration #### Issues Closes #7246 Closes https://linear.app/getsentry/issue/PY-2739/update-logging-integration
### Description Get the Loguru integration into shape now that Sentry Logs is a first-class feature. The idea is to make Logs the primary feature the integration offers, with capturing events an optional add-on. High-level overview of the changes: - The integration has to be **enabled explicitly** by the user. It's not auto-enabled anymore. - **Sentry logs related options and features get more generic sounding names**. - For instance, `level` (before: `sentry_logs_level`) now sets the Sentry logs level. - Existing secondary features with previously generic names get specialized names (`level` -> `breadcrumb_level`). - **Capturing Sentry logs is on by default** when the integration is enabled. - **Event capture is off by default**, but can be turned on via an option. Breadcrumb capture is still on by default. - The **`capture_sentry_logs` option is gone completely**. Since logs instrumentation is now on by default, and the `level` option exists, it was superfluous. Capturing logs can still be opted out of by setting `level=None`. #### Issues Closes #7247 Closes https://linear.app/getsentry/issue/PY-2740/update-loguru-integration
| - The `enable_logs` option was removed. Using Sentry's logging API now works without requiring setting `enable_logs=True`. Automatic capture of logs emitted by the `logging` standard library module or Loguru can be turned on by providing the `capture_sentry_logs=True` option to either `LoggingIntegration` or `LoguruIntegration`: | ||
|
|
||
| ```python | ||
| import sentry_sdk | ||
| from sentry_sdk.integrations.logging import LoggingIntegration | ||
| from sentry_sdk.integrations.loguru import LoguruIntegration | ||
|
|
||
| sentry_sdk.init( | ||
| integrations=[ | ||
| LoggingIntegration(capture_sentry_logs=True), | ||
| LoguruIntegration(capture_sentry_logs=True), | ||
| ] | ||
| ) | ||
| ``` |
There was a problem hiding this comment.
Migration guide's logging example uses the removed capture_sentry_logs option
The SDK 3.x migration guide instructs users to initialize LoggingIntegration and LoguruIntegration with capture_sentry_logs=True, but both constructors reject that keyword with TypeError. Update the example to use the new level option, or omit it because level defaults to INFO.
Evidence
LoggingIntegration.__init__acceptslevel,event_level, andbreadcrumb_level; it has nocapture_sentry_logsparameter.LoguruIntegration.__init__likewise acceptslevel,event_level, and formatting/breadcrumb options, but notcapture_sentry_logs.- The guide previously states that
capture_sentry_logswas removed and recommendslevel=Noneto disable capture, contradicting the example in the Removed section. - Following the example therefore raises
TypeErrorwhile initializing either integration.
Also found at 1 additional location
sentry_sdk/consts.py:1345-1345
Identified by Warden · code-review, find-bugs · PSD-4YZ
| - The `level` integration option is now called `breadcrumb_level`. | ||
| - The `sentry_logs_level` integration option is now called `level`. | ||
| - The `capture_sentry_logs` option was removed. Use `level=None` to disable log capture. | ||
| - The `ignore_logger` helper was renamed to `ignore_logger_for_breadcrumbs_and_events`. |
There was a problem hiding this comment.
ignore_logger rename target does not match the real API
The bullet renames ignore_logger to ignore_logger_for_breadcrumbs_and_events, but the real function and the table below both use ignore_logger_for_events.
Evidence
sentry_sdk/integrations/logging.pydefinesignore_logger_for_eventsandunignore_logger_for_events, notignore_logger_for_breadcrumbs_and_events.- Integrations such as aiohttp, celery, rq, and tornado import and call
ignore_logger_for_events. - The migration table on line 57 already maps
ignore_logger→ignore_logger_for_events, contradicting the bullet on line 46.
Identified by Warden · code-review, find-bugs · R6Q-HNJ
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
SDK3.0 label on GitHub so that you can follow along.Notable changes
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-basebranch, 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.Changes