Skip to content

chore(api): update dependency sentry-sdk to v2 (develop) - autoclosed

RenovateBot requested to merge renovate/develop-api-sentry-sdk-2.x into develop

This MR contains the following updates:

Package Type Update Change
sentry-sdk (changelog) dependencies major ==1.19.1 -> ==2.20.0

Release Notes

getsentry/sentry-python (sentry-sdk)

v2.20.0

Compare Source

v2.19.2

Compare Source

Various fixes & improvements

v2.19.1

Compare Source

Various fixes & improvements

v2.19.0

Compare Source

Various fixes & improvements

v2.18.0

Compare Source

Various fixes & improvements

v2.17.0

Compare Source

Various fixes & improvements

v2.16.0

Compare Source

Integrations
  • Bottle: Add failed_request_status_codes (#​3618) by @​szokeasaurusrex

    You can now define a set of integers that will determine which status codes should be reported to Sentry.

    sentry_sdk.init(
        integrations=[
            BottleIntegration(
                failed_request_status_codes={403, *range(500, 600)},
            )
        ]
    )

    Examples of valid failed_request_status_codes:

    • {500} will only send events on HTTP 500.
    • {400, *range(500, 600)} will send events on HTTP 400 as well as the 5xx range.
    • {500, 503} will send events on HTTP 500 and 503.
    • set() (the empty set) will not send events for any HTTP status code.

    The default is {*range(500, 600)}, meaning that all 5xx status codes are reported to Sentry.

  • Bottle: Delete never-reached code (#​3605) by @​szokeasaurusrex

  • Redis: Remove flaky test (#​3626) by @​sentrivana

  • Django: Improve getting psycopg3 connection info (#​3580) by @​nijel

  • Django: Add SpotlightMiddleware when Spotlight is enabled (#​3600) by @​BYK

  • Django: Open relevant error when SpotlightMiddleware is on (#​3614) by @​BYK

  • Django: Support http_methods_to_capture in ASGI Django (#​3607) by @​sentrivana

    ASGI Django now also supports the http_methods_to_capture integration option. This is a configurable tuple of HTTP method verbs that should create a transaction in Sentry. The default is ("CONNECT", "DELETE", "GET", "PATCH", "POST", "PUT", "TRACE",). OPTIONS and HEAD are not included by default.

    Here's how to use it:

    sentry_sdk.init(
        integrations=[
            DjangoIntegration(
                http_methods_to_capture=("GET", "POST"),
            ),
        ],
    )
Miscellaneous

v2.15.0

Compare Source

Integrations
  • Configure HTTP methods to capture in ASGI/WSGI middleware and frameworks (#​3531) by @​antonpirker

    We've added a new option to the Django, Flask, Starlette and FastAPI integrations called http_methods_to_capture. This is a configurable tuple of HTTP method verbs that should create a transaction in Sentry. The default is ("CONNECT", "DELETE", "GET", "PATCH", "POST", "PUT", "TRACE",). OPTIONS and HEAD are not included by default.

    Here's how to use it (substitute Flask for your framework integration):

    sentry_sdk.init(
        integrations=[
          FlaskIntegration(
              http_methods_to_capture=("GET", "POST"),
          ),
      ],
    )
  • Django: Allow ASGI to use drf_request in DjangoRequestExtractor (#​3572) by @​PakawiNz

  • Django: Don't let RawPostDataException bubble up (#​3553) by @​sentrivana

  • Django: Add sync_capable to SentryWrappingMiddleware (#​3510) by @​szokeasaurusrex

  • AIOHTTP: Add failed_request_status_codes (#​3551) by @​szokeasaurusrex

    You can now define a set of integers that will determine which status codes should be reported to Sentry.

    sentry_sdk.init(
        integrations=[
            AioHttpIntegration(
                failed_request_status_codes={403, *range(500, 600)},
            )
        ]
    )

    Examples of valid failed_request_status_codes:

    • {500} will only send events on HTTP 500.
    • {400, *range(500, 600)} will send events on HTTP 400 as well as the 5xx range.
    • {500, 503} will send events on HTTP 500 and 503.
    • set() (the empty set) will not send events for any HTTP status code.

    The default is {*range(500, 600)}, meaning that all 5xx status codes are reported to Sentry.

  • AIOHTTP: Delete test which depends on AIOHTTP behavior (#​3568) by @​szokeasaurusrex

  • AIOHTTP: Handle invalid responses (#​3554) by @​szokeasaurusrex

  • FastAPI/Starlette: Support new failed_request_status_codes (#​3563) by @​szokeasaurusrex

    The format of failed_request_status_codes has changed from a list of integers and containers to a set:

    sentry_sdk.init(
        integrations=StarletteIntegration(
            failed_request_status_codes={403, *range(500, 600)},
        ),
    )

    The old way of defining failed_request_status_codes will continue to work for the time being. Examples of valid new-style failed_request_status_codes:

    • {500} will only send events on HTTP 500.
    • {400, *range(500, 600)} will send events on HTTP 400 as well as the 5xx range.
    • {500, 503} will send events on HTTP 500 and 503.
    • set() (the empty set) will not send events for any HTTP status code.

    The default is {*range(500, 600)}, meaning that all 5xx status codes are reported to Sentry.

  • FastAPI/Starlette: Fix failed_request_status_codes=[] (#​3561) by @​szokeasaurusrex

  • FastAPI/Starlette: Remove invalid failed_request_status_code tests (#​3560) by @​szokeasaurusrex

  • FastAPI/Starlette: Refactor shared test parametrization (#​3562) by @​szokeasaurusrex

Miscellaneous

v2.14.0

Compare Source

Various fixes & improvements

v2.13.0

Compare Source

Various fixes & improvements
  • New integration: Ray (#​2400) (#​2444) by @​glowskir

    Usage: (add the RayIntegration to your sentry_sdk.init() call and make sure it is called in the worker processes)

    import ray
    
    import sentry_sdk
    from sentry_sdk.integrations.ray import RayIntegration
    
    def init_sentry():
        sentry_sdk.init(
            dsn="...",
            traces_sample_rate=1.0,
            integrations=[RayIntegration()],
        )
    
    init_sentry()
    
    ray.init(
        runtime_env=dict(worker_process_setup_hook=init_sentry),
    )

    For more information, see the documentation for the Ray integration.

  • New integration: Litestar (#​2413) (#​3358) by @​KellyWalker

    Usage: (add the LitestarIntegration to your sentry_sdk.init())

    from litestar import Litestar, get
    
    import sentry_sdk
    from sentry_sdk.integrations.litestar import LitestarIntegration
    
    sentry_sdk.init(
        dsn="...",
        traces_sample_rate=1.0,
        integrations=[LitestarIntegration()],
    )
    
    @​get("/")
    async def index() -> str:
        return "Hello, world!"
    
    app = Litestar(...)

    For more information, see the documentation for the Litestar integration.

  • New integration: Dramatiq from @​jacobsvante (#​3397) by @​antonpirker Usage: (add the DramatiqIntegration to your sentry_sdk.init())

    import dramatiq
    
    import sentry_sdk
    from sentry_sdk.integrations.dramatiq import DramatiqIntegration
    
    sentry_sdk.init(
        dsn="...",
        traces_sample_rate=1.0,
        integrations=[DramatiqIntegration()],
    )
    
    @​dramatiq.actor(max_retries=0)
    def dummy_actor(x, y):
        return x / y
    
    dummy_actor.send(12, 0)

    For more information, see the documentation for the Dramatiq integration.

  • New config option: Expose custom_repr function that precedes safe_repr invocation in serializer (#​3438) by @​sl0thentr0py

    See: https://docs.sentry.io/platforms/python/configuration/options/#custom-repr

  • Profiling: Add client SDK info to profile chunk (#​3386) by @​Zylphrex

  • Serialize vars early to avoid living references (#​3409) by @​sl0thentr0py

  • Deprecate hub-based sessions.py logic (#​3419) by @​szokeasaurusrex

  • Deprecate is_auto_session_tracking_enabled (#​3428) by @​szokeasaurusrex

  • Add note to generated yaml files (#​3423) by @​sentrivana

  • Slim down MR template (#​3382) by @​sentrivana

  • Use new banner in readme (#​3390) by @​sentrivana

v2.12.0

Compare Source

Various fixes & improvements

v2.11.0

Compare Source

Various fixes & improvements
  • Add disabled_integrations (#​3328) by @​sentrivana

    Disabling individual integrations is now much easier. Instead of disabling all automatically enabled integrations and specifying the ones you want to keep, you can now use the new disabled_integrations config option to provide a list of integrations to disable:

    import sentry_sdk
    from sentry_sdk.integrations.flask import FlaskIntegration
    
    sentry_sdk.init(

Do not use the Flask integration even if Flask is installed.

  disabled_integrations=[
      FlaskIntegration(),
  ],

)


- Use operation name as transaction name in Strawberry (#​3294) by @​sentrivana
- WSGI integrations respect `SCRIPT_NAME` env variable (#​2622) by @​sarvaSanjay
- Make Django DB spans have origin `auto.db.django` (#​3319) by @​antonpirker
- Sort breadcrumbs by time before sending (#​3307) by @​antonpirker
- Fix `KeyError('sentry-monitor-start-timestamp-s')` (#​3278) by @​Mohsen-Khodabakhshi
- Set MongoDB tags directly on span data (#​3290) by @​0Calories
- Lower logger level for some messages (#​3305) by @​sentrivana and @​antonpirker
- Emit deprecation warnings from `Hub` API (#​3280) by @​szokeasaurusrex
- Clarify that `instrumenter` is internal-only (#​3299) by @​szokeasaurusrex
- Support Django 5.1 (#​3207) by @​sentrivana
- Remove apparently unnecessary `if` (#​3298) by @​szokeasaurusrex
- Preliminary support for Python 3.13 (#​3200) by @​sentrivana
- Move `sentry_sdk.init` out of `hub.py` (#​3276) by @​szokeasaurusrex
- Unhardcode integration list (#​3240) by @​rominf
- Allow passing of PostgreSQL port in tests (#​3281) by @​rominf
- Add tests for `@ai_track` decorator (#​3325) by @​colin-sentry
- Do not include type checking code in coverage report (#​3327) by @​antonpirker
- Fix test_installed_modules (#​3309) by @​szokeasaurusrex
- Fix typos and grammar in a comment (#​3293) by @​szokeasaurusrex
- Fixed failed tests setup (#​3303) by @​antonpirker
- Only assert warnings we are interested in (#​3314) by @​szokeasaurusrex

v2.10.0

Compare Source

Various fixes & improvements

v2.9.0

Compare Source

Various fixes & improvements

v2.8.0

Compare Source

Various fixes & improvements

v2.7.1

Compare Source

Various fixes & improvements

v2.7.0

Compare Source

v2.6.0

Compare Source

v2.5.1

Compare Source

This change fixes a regression in our cron monitoring feature, which caused cron checkins not to be sent. The regression appears to have been introduced in version 2.4.0.

We recommend that all users, who use Cron monitoring and are currently running sentry-python ≥2.4.0, upgrade to this release as soon as possible!

Other fixes & improvements

v2.5.0

Compare Source

Various fixes & improvements
  • Allow to configure status codes to report to Sentry in Starlette and FastAPI (#​3008) by @​sentrivana

    By passing a new option to the FastAPI and Starlette integrations, you're now able to configure what status codes should be sent as events to Sentry. Here's how it works:

    from sentry_sdk.integrations.starlette import StarletteIntegration
    from sentry_sdk.integrations.fastapi import FastApiIntegration
    
    sentry_sdk.init(

...

  integrations=[
      StarletteIntegration(
          failed_request_status_codes=[403, range(500, 599)],
      ),
      FastApiIntegration(
          failed_request_status_codes=[403, range(500, 599)],
      ),
  ]

)


`failed_request_status_codes` expects a list of integers or containers (objects that allow membership checks via `in`)
of integers. Examples of valid `failed_request_status_codes`:

- `[500]` will only send events on HTTP 500.
- `[400, range(500, 599)]` will send events on HTTP 400 as well as the 500-599 range.
- `[500, 503]` will send events on HTTP 500 and 503.

The default is `[range(500, 599)]`.

See the [FastAPI](https://docs.sentry.io/platforms/python/integrations/fastapi/) and [Starlette](https://docs.sentry.io/platforms/python/integrations/starlette/) integration docs for more details.

- Support multiple keys with `cache_prefixes` (#​3136) by @​sentrivana
- Support integer Redis keys (#​3132) by @​sentrivana
- Update SDK version in CONTRIBUTING.md (#​3129) by @​sentrivana
- Bump actions/checkout from 4.1.4 to 4.1.5 (#​3067) by @​dependabot

v2.4.0

Compare Source

Various fixes & improvements

v2.3.1

Compare Source

Various fixes & improvements

v2.3.0

Compare Source

Various fixes & improvements

v2.2.1

Compare Source

Various fixes & improvements

v2.2.0

Compare Source

New features
  • Celery integration now sends additional data to Sentry to enable new features to guage the health of your queues
  • Added a new integration for Cohere
  • Reintroduced the last_event_id function, which had been removed in 2.0.0
Other fixes & improvements

v2.1.1

Compare Source

v2.1.0

Compare Source

v2.0.1

Compare Source

Various fixes & improvements

v2.0.0

Compare Source

This is the first major update in a long time!

We dropped support for some ancient languages and frameworks (Yes, Python 2.7 is no longer supported). Additionally we refactored a big part of the foundation of the SDK (how data inside the SDK is handled).

We hope you like it!

For a shorter version of what you need to do, to upgrade to Sentry SDK 2.0 see: https://docs.sentry.io/platforms/python/migration/1.x-to-2.x

New Features
  • Additional integrations will now be activated automatically if the SDK detects the respective package is installed: Ariadne, ARQ, asyncpg, Chalice, clickhouse-driver, GQL, Graphene, huey, Loguru, PyMongo, Quart, Starlite, Strawberry.
  • Added new API for custom instrumentation: new_scope, isolation_scope. See the Deprecated section to see how they map to the existing APIs.
Changed

(These changes are all backwards-incompatible. Breaking Change (if you are just skimming for that phrase))

  • The Pyramid integration will not capture errors that might happen in authenticated_userid() in a custom AuthenticationPolicy class.
  • The method need_code_loation of the MetricsAggregator was renamed to need_code_location.
  • The BackgroundWorker thread used to process events was renamed from raven-sentry.BackgroundWorker to sentry-sdk.BackgroundWorker.
  • The reraise function was moved from sentry_sdk._compat to sentry_sdk.utils.
  • The _ScopeManager was moved from sentry_sdk.hub to sentry_sdk.scope.
  • Moved the contents of tracing_utils_py3.py to tracing_utils.py. The start_child_span_decorator is now in sentry_sdk.tracing_utils.
  • The actual implementation of get_current_span was moved to sentry_sdk.tracing_utils. sentry_sdk.get_current_span is still accessible as part of the top-level API.
  • sentry_sdk.tracing_utils.add_query_source(): Removed the hub parameter. It is not necessary anymore.
  • sentry_sdk.tracing_utils.record_sql_queries(): Removed the hub parameter. It is not necessary anymore.
  • sentry_sdk.tracing_utils.get_current_span() does now take a scope instead of a hub as parameter.
  • sentry_sdk.tracing_utils.should_propagate_trace() now takes a Client instead of a Hub as first parameter.
  • sentry_sdk.utils.is_sentry_url() now takes a Client instead of a Hub as first parameter.
  • sentry_sdk.utils._get_contextvars does not return a tuple with three values, but a tuple with two values. The copy_context was removed.
  • If you create a transaction manually and later mutate the transaction in a configure_scope block this does not work anymore. Here is a recipe on how to change your code to make it work: Your existing implementation:
    transaction = sentry_sdk.transaction(...)

later in the code execution:

with sentry_sdk.configure_scope() as scope:
    scope.set_transaction_name("new-transaction-name")
```

needs to be changed to this:
```python
transaction = sentry_sdk.transaction(...)

later in the code execution:

scope = sentry_sdk.get_current_scope()
scope.set_transaction_name("new-transaction-name")
```
  • The classes listed in the table below are now abstract base classes. Therefore, they can no longer be instantiated. Subclasses can only be instantiated if they implement all of the abstract methods.

    Show table
    Class Abstract methods
    sentry_sdk.integrations.Integration setup_once
    sentry_sdk.metrics.Metric add, serialize_value, and weight
    sentry_sdk.profiler.Scheduler setup and teardown
    sentry_sdk.transport.Transport capture_envelope
Removed

(These changes are all backwards-incompatible. Breaking Change (if you are just skimming for that phrase))

  • Removed support for Python 2 and Python 3.5. The SDK now requires at least Python 3.6.
  • Removed support for Celery 3.*.
  • Removed support for Django 1.8, 1.9, 1.10.
  • Removed support for Flask 0.*.
  • Removed support for gRPC < 1.39.
  • Removed support for Tornado < 6.
  • Removed last_event_id() top level API. The last event ID is still returned by capture_event(), capture_exception() and capture_message() but the top level API sentry_sdk.last_event_id() has been removed.
  • Removed support for sending events to the /store endpoint. Everything is now sent to the /envelope endpoint. If you're on SaaS you don't have to worry about this, but if you're running Sentry yourself you'll need version 20.6.0 or higher of self-hosted Sentry.
  • The deprecated with_locals configuration option was removed. Use include_local_variables instead. See https://docs.sentry.io/platforms/python/configuration/options/#include-local-variables.
  • The deprecated request_bodies configuration option was removed. Use max_request_body_size. See https://docs.sentry.io/platforms/python/configuration/options/#max-request-body-size.
  • Removed support for user.segment. It was also removed from the trace header as well as from the dynamic sampling context.
  • Removed support for the install method for custom integrations. Please use setup_once instead.
  • Removed sentry_sdk.tracing.Span.new_span. Use sentry_sdk.tracing.Span.start_child instead.
  • Removed sentry_sdk.tracing.Transaction.new_span. Use sentry_sdk.tracing.Transaction.start_child instead.
  • Removed support for creating transactions via sentry_sdk.tracing.Span(transaction=...). To create a transaction, please use sentry_sdk.tracing.Transaction(name=...).
  • Removed sentry_sdk.utils.Auth.store_api_url.
  • sentry_sdk.utils.Auth.get_api_url's now accepts a sentry_sdk.consts.EndpointType enum instead of a string as its only parameter. We recommend omitting this argument when calling the function, since the parameter's default value is the only possible sentry_sdk.consts.EndpointType value. The parameter exists for future compatibility.
  • Removed tracing_utils_py2.py. The start_child_span_decorator is now in sentry_sdk.tracing_utils.
  • Removed the sentry_sdk.profiler.Scheduler.stop_profiling method. Any calls to this method can simply be removed, since this was a no-op method.
Deprecated

do something


After:

```python
import sentry_sdk

with sentry_sdk.start_span(...):

### do something
  • Hub cloning is deprecated.

    Before:

    with Hub(Hub.current) as hub:

do something with the cloned hub


After:

```python
import sentry_sdk

with sentry_sdk.isolation_scope() as scope:

### do something with the forked scope
  • configure_scope is deprecated. Use the new isolation scope directly via get_isolation_scope() instead.

    Before:

    with configure_scope() as scope:

do something with scope


After:

```python
from sentry_sdk import get_isolation_scope

scope = get_isolation_scope()

v1.45.1

Compare Source

This is a security backport release.

v1.45.0

Compare Source

This is the final 1.x release for the forseeable future. Development will continue on the 2.x release line. The first 2.x version will be available in the next few weeks.

Various fixes & improvements
  • Allow to upsert monitors (#​2929) by @​sentrivana

    It's now possible to provide monitor_config to the monitor decorator/context manager directly:

    from sentry_sdk.crons import monitor

v1.44.1

Compare Source

Various fixes & improvements
  • Make monitor async friendly (#​2912) by @​sentrivana

    You can now decorate your async functions with the monitor decorator and they will correctly report their duration and completion status.

  • Fixed Event | None runtime TypeError (#​2928) by @​szokeasaurusrex

v1.44.0

Compare Source

Various fixes & improvements

v1.43.0

Compare Source

Various fixes & improvements
  • Add optional keep_alive (#​2842) by @​sentrivana

    If you're experiencing frequent network issues between the SDK and Sentry, you can try turning on TCP keep-alive:

    import sentry_sdk
    
    sentry_sdk.init(

...your usual settings...

  keep_alive=True,

)


- Add support for Celery Redbeat cron tasks (#&#8203;2643) by @&#8203;kwigley

The SDK now supports the Redbeat scheduler in addition to the default
Celery Beat scheduler for auto instrumenting crons. See
[the docs](https://docs.sentry.io/platforms/python/integrations/celery/crons/)
for more information about how to set this up.

- `aws_event` can be an empty list (#&#8203;2849) by @&#8203;sentrivana
- Re-export `Event` in `types.py` (#&#8203;2829) by @&#8203;szokeasaurusrex
- Small API docs improvement (#&#8203;2828) by @&#8203;antonpirker
- Fixed OpenAI tests (#&#8203;2834) by @&#8203;antonpirker
- Bump `checkouts/data-schemas` from `ed078ed` to `8232f17` (#&#8203;2832) by @&#8203;dependabot

v1.42.0

Compare Source

Various fixes & improvements
  • New integration: OpenAI integration (#​2791) by @​colin-sentry

    We added an integration for OpenAI to capture errors and also performance data when using the OpenAI Python SDK.

    Useage:

    This integrations is auto-enabling, so if you have the openai package in your project it will be enabled. Just initialize Sentry before you create your OpenAI client.

    from openai import OpenAI
    
    import sentry_sdk
    
    sentry_sdk.init(
        dsn="___PUBLIC_DSN___",
        enable_tracing=True,
        traces_sample_rate=1.0,
    )
    
    client = OpenAI()

    For more information, see the documentation for OpenAI integration.

  • Discard open OpenTelemetry spans after 10 minutes (#​2801) by @​antonpirker

  • Propagate sentry-trace and baggage headers to Huey tasks (#​2792) by @​cnschn

  • Added Event type (#​2753) by @​szokeasaurusrex

  • Improve scrub_dict typing (#​2768) by @​szokeasaurusrex

  • Dependencies: bump types-protobuf from 4.24.0.20240302 to 4.24.0.20240311 (#​2797) by @​dependabot

v1.41.0

Compare Source

Various fixes & improvements
  • Add recursive scrubbing to EventScrubber (#​2755) by @​Cheapshot003

    By default, the EventScrubber will not search your events for potential PII recursively. With this release, you can enable this behavior with:

    import sentry_sdk
    from sentry_sdk.scrubber import EventScrubber
    
    sentry_sdk.init(

...your usual settings...

  event_scrubber=EventScrubber(recursive=True),

)


- Expose `socket_options` (#&#8203;2786) by @&#8203;sentrivana

If the SDK is experiencing connection issues (connection resets, server
closing connection without response, etc.) while sending events to Sentry,
tweaking the default `urllib3` socket options to the following can help:

```python
import socket
from urllib3.connection import HTTPConnection
import sentry_sdk

sentry_sdk.init(

### ...your usual settings...
    socket_options=HTTPConnection.default_socket_options + [
        (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),

### note: skip the following line if you're on MacOS since TCP_KEEPIDLE doesn't exist there
        (socket.SOL_TCP, socket.TCP_KEEPIDLE, 45),
        (socket.SOL_TCP, socket.TCP_KEEPINTVL, 10),
        (socket.SOL_TCP, socket.TCP_KEEPCNT, 6),
    ],
)

v1.40.6

Compare Source

Various fixes & improvements

v1.40.5

Compare Source

Various fixes & improvements
  • Deprecate last_event_id(). (#​2749) by @​antonpirker

  • Warn if uWSGI is set up without proper thread support (#​2738) by @​sentrivana

    uWSGI has to be run in threaded mode for the SDK to run properly. If this is not the case, the consequences could range from features not working unexpectedly to uWSGI workers crashing.

    Please make sure to run uWSGI with both --enable-threads and --py-call-uwsgi-fork-hooks.

  • parsed_url can be None (#​2734) by @​sentrivana

  • Python 3.7 is not supported anymore by Lambda, so removed it and added 3.12 (#​2729) by @​antonpirker

v1.40.4

Compare Source

Various fixes & improvements

v1.40.3

Compare Source

Various fixes & improvements

v1.40.2

Compare Source

Various fixes & improvements

v1.40.1

Compare Source

Various fixes & improvements

v1.40.0

Compare Source

Various fixes & improvements

v1.39.2

Compare Source

Various fixes & improvements

v1.39.1

Compare Source

Various fixes & improvements

v1.39.0

Compare Source

Various fixes & improvements

v1.38.0

Compare Source

Various fixes & improvements

v1.37.1

Compare Source

Various fixes & improvements

v1.37.0

Compare Source

Various fixes & improvements

v1.36.0

Compare Source

Various fixes & improvements

v1.35.0

Compare Source

Various fixes & improvements
  • Updated gRPC integration: Asyncio interceptors and easier setup (#​2369) by @​fdellekart

    Our gRPC integration now instruments incoming unary-unary grpc requests and outgoing unary-unary, unary-stream grpc requests using grpcio channels. Everything works now for sync and async code.

    Before this release you had to add Sentry interceptors by hand to your gRPC code, now the only thing you need to do is adding the GRPCIntegration to you sentry_sdk_init() call. (See documentation for more information):

    import sentry_sdk
    from sentry_sdk.integrations.grpc import GRPCIntegration
    
    sentry_sdk.init(
        dsn="___PUBLIC_DSN___",
        enable_tracing=True,
        integrations=[
            GRPCIntegration(),
        ],
    )

    The old way still works, but we strongly encourage you to update your code to the way described above.

  • Python 3.12: Replace deprecated datetime functions (#​2502) by @​sentrivana

  • Metrics: Unify datetime format (#​2409) by @​mitsuhiko

  • Celery: Set correct data in check_ins (#​2500) by @​antonpirker

  • Celery: Read timezone for Crons monitors from celery_schedule if existing (#​2497) by @​antonpirker

  • Django: Removing redundant code in Django tests (#​2491) by @​vagi8

  • Django: Make reading the request body work in Django ASGI apps. (#​2495) by @​antonpirker

  • FastAPI: Use wraps on fastapi request call wrapper (#​2476) by @​nkaras

  • Fix: Probe for psycopg2 and psycopg3 parameters function. (#​2492) by @​antonpirker

  • Fix: Remove unnecessary TYPE_CHECKING alias (#​2467) by @​rafrafek

v1.34.0

Compare Source

Various fixes & improvements

v1.33.1

Compare Source

Various fixes & improvements

v1.33.0

Compare Source

Various fixes & improvements

v1.32.0

Compare Source

Various fixes & improvements

make sure to set async_execution to False if you're executing

GraphQL queries synchronously

          StrawberryIntegration(async_execution=True),
      ],
      traces_sample_rate=1.0,
  )
```

v1.31.0

Compare Source

Various fixes & improvements
  • New: Add integration for clickhouse-driver (#​2167) by @​mimre25

    For more information, see the documentation for clickhouse-driver for more information.

    Usage:

      import sentry_sdk
      from sentry_sdk.integrations.clickhouse_driver import ClickhouseDriverIntegration
    
      sentry_sdk.init(
          dsn='___PUBLIC_DSN___',
          integrations=[
              ClickhouseDriverIntegration(),
          ],
      )
  • New: Add integration for asyncpg (#​2314) by @​mimre25

    For more information, see the documentation for asyncpg for more information.

    Usage:

      import sentry_sdk
      from sentry_sdk.integrations.asyncpg import AsyncPGIntegration
    
      sentry_sdk.init(
          dsn='___PUBLIC_DSN___',
          integrations=[
              AsyncPGIntegration(),
          ],
      )
  • New: Allow to override propagate_traces in Celery per task (#​2331) by @​jan-auer

    For more information, see the documentation for Celery for more information.

    Usage:

      import sentry_sdk
      from sentry_sdk.integrations.celery import CeleryIntegration

Enable global distributed traces (this is the default, just to be explicit.)

sentry_sdk.init(
    dsn='___PUBLIC_DSN___',
    integrations=[
        CeleryIntegration(propagate_traces=True),
    ],
)

...

This will NOT propagate the trace. (The task will start its own trace):

my_task_b.apply_async(
    args=("some_parameter", ),
    headers={"sentry-propagate-traces": False},
)

- Prevent Falcon integration from breaking ASGI apps (#&#8203;2359) by @&#8203;szokeasaurusrex
- Backpressure: only downsample a max of 10 times (#&#8203;2347) by @&#8203;sl0thentr0py
- Made NoOpSpan compatible to Transactions. (#&#8203;2364) by @&#8203;antonpirker
- Cleanup ASGI integration (#&#8203;2335) by @&#8203;antonpirker
- Pin anyio in tests (dep of httpx), because new major 4.0.0 breaks tests. (#&#8203;2336) by @&#8203;antonpirker
- Added link to backpressure section in docs. (#&#8203;2354) by @&#8203;antonpirker
- Add .vscode to .gitignore (#&#8203;2317) by @&#8203;shoaib-mohd
- Documenting Spans and Transactions (#&#8203;2358) by @&#8203;antonpirker
- Fix in profiler: do not call getcwd from module root (#&#8203;2329) by @&#8203;Zylphrex
- Fix deprecated version attribute (#&#8203;2338) by @&#8203;vagi8
- Fix transaction name in Starlette and FastAPI (#&#8203;2341) by @&#8203;antonpirker
- Fix tests using Postgres (#&#8203;2362) by @&#8203;antonpirker
- build(deps): Updated linting tooling (#&#8203;2350) by @&#8203;antonpirker
- build(deps): bump sphinx from 7.2.4 to 7.2.5 (#&#8203;2344) by @&#8203;dependabot
- build(deps): bump actions/checkout from 2 to 4 (#&#8203;2352) by @&#8203;dependabot
- build(deps): bump checkouts/data-schemas from `ebc77d3` to `68def1e` (#&#8203;2351) by @&#8203;dependabot

v1.30.0

Compare Source

Various fixes & improvements
  • Officially support Python 3.11 (#​2300) by @​sentrivana

  • Context manager monitor (#​2290) by @​szokeasaurusrex

  • Set response status code in transaction response context. (#​2312) by @​antonpirker

  • Add missing context kwarg to _sentry_task_factory (#​2267) by @​JohnnyDeuss

  • In Postgres take the connection params from the connection (#​2308) by @​antonpirker

  • Experimental: Allow using OTel for performance instrumentation (#​2272) by @​sentrivana

    This release includes experimental support for replacing Sentry's default performance monitoring solution with one powered by OpenTelemetry without having to do any manual setup.

    Try it out by installing pip install sentry-sdk[opentelemetry-experimental] and then initializing the SDK with:

    sentry_sdk.init(

...your usual options...

    _experiments={"otel_powered_performance": True},
)
```

This enables OpenTelemetry performance monitoring support for some of the most
popular frameworks and libraries (Flask, Django, FastAPI, requests...).

We're looking forward to your feedback! Please let us know about your experience
in this discussion: https://github.com/getsentry/sentry/discussions/55023

**Important note:** Please note that this feature is experimental and in a
proof-of-concept stage and is not meant for production use. It may be changed or
removed at any point.
  • Enable backpressure handling by default (#​2298) by @​sl0thentr0py

    The SDK now dynamically downsamples transactions to reduce backpressure in high throughput systems. It starts a new Monitor thread to perform some health checks which decide to downsample (halved each time) in 10 second intervals till the system is healthy again.

    To disable this behavior, use:

    sentry_sdk.init(

...your usual options...

    enable_backpressure_handling=False,
)
```

If your system serves heavy load, please let us know how this feature works for you!

Check out the [documentation](https://docs.sentry.io/platforms/python/configuration/options/#enable-backpressure-handling) for more information.

v1.29.2

Compare Source

Various fixes & improvements

v1.29.1

Compare Source

Various fixes & improvements

v1.29.0

Compare Source

Various fixes & improvements

v1.28.1

Compare Source

Various fixes & improvements

v1.28.0

Compare Source

Various fixes & improvements

v1.27.1

Compare Source

Various fixes & improvements
  • Add Starlette/FastAPI template tag for adding Sentry tracing information (#​2225) by @​antonpirker
    • By adding {{ sentry_trace_meta }} to your Starlette/FastAPI Jinja2 templates we will include Sentry trace information as a meta tag in the rendered HTML to allow your frontend to pick up and continue the trace started in the backend.
  • Fixed generation of baggage when a DSC is already in propagation context (#​2232) by @​antonpirker
  • Handle explicitly passing None for trace_configs in aiohttp (#​2230) by @​Harmon758
  • Support newest Starlette versions (#​2227) by @​antonpirker

v1.27.0

Compare Source

Various fixes & improvements

v1.26.0

Compare Source

Various fixes & improvements

v1.25.1

Compare Source

Django update (ongoing)

Collections of improvements to our Django integration.

By: @​mgaligniana (#​1773)

Various fixes & improvements

v1.25.0

Compare Source

Various fixes & improvements

v1.24.0

Compare Source

Various fixes & improvements
  • New: Celery Beat exclude tasks option (#​2130) by @​antonpirker

    You can exclude Celery Beat tasks from being auto-instrumented. To do this, add a list of tasks you want to exclude as option exclude_beat_tasks when creating CeleryIntegration. The list can contain simple strings with the full task name, as specified in the Celery Beat schedule, or regular expressions to match multiple tasks.

    For more information, see the documentation for Crons for more information.

    Usage:

        exclude_beat_tasks = [
            "some-task-a",
            "payment-check-.*",
        ]
        sentry_sdk.init(
            dsn='___PUBLIC_DSN___',
            integrations=[
                CeleryIntegration(
                    monitor_beat_tasks=True,
                    exclude_beat_tasks=exclude_beat_tasks,
                ),
            ],
        )

    In this example the task some-task-a and all tasks with a name starting with payment-check- will be ignored.

  • New: Add support for ExceptionGroups (#​2025) by @​antonpirker

    Note: If running Self-Hosted Sentry, you should wait to adopt this SDK update until after updating to the 23.6.0 (est. June 2023) release of Sentry. Updating early will not break anything, but you will not get the full benefit of the Exception Groups improvements to issue grouping that were added to the Sentry backend.

  • Prefer importlib.metadata over pkg_resources if available (#​2081) by @​sentrivana

  • Work with a copy of request, vars in the event (#​2125) by @​sentrivana

  • Pinned version of dependency that broke the build (#​2133) by @​antonpirker

v1.23.1

Compare Source

Various fixes & improvements

v1.23.0

Compare Source

Various fixes & improvements
  • New: Add loguru integration (#​1994) by @​PerchunPak

    Check the documentation for more information.

    Usage:

    from loguru import logger
    import sentry_sdk
    from sentry_sdk.integrations.loguru import LoguruIntegration
    
    sentry_sdk.init(
        dsn="___PUBLIC_DSN___",
        integrations=[
            LoguruIntegration(),
        ],
    )
    
    logger.debug("I am ignored")
    logger.info("I am a breadcrumb")
    logger.error("I am an event", extra=dict(bar=43))
    logger.exception("An exception happened")
    • An error event with the message "I am an event" will be created.
    • "I am a breadcrumb" will be attached as a breadcrumb to that event.
    • bar will end up in the extra attributes of that event.
    • "An exception happened" will send the current exception from sys.exc_info() with the stack trace to Sentry. If there's no exception, the current stack will be attached.
    • The debug message "I am ignored" will not be captured by Sentry. To capture it, set level to DEBUG or lower in LoguruIntegration.
  • Do not truncate request body if request_bodies is "always" (#​2092) by @​sentrivana

  • Fixed Celery headers for Beat auto-instrumentation (#​2102) by @​antonpirker

  • Add db.operation to Redis and MongoDB spans (#​2089) by @​antonpirker

  • Make sure we're importing redis the library (#​2106) by @​sentrivana

  • Add include_source_context option (#​2020) by @​farhat-nawaz and @​sentrivana

  • Import Markup from markupsafe (#​2047) by @​rco-ableton

  • Fix __qualname__ missing attribute in asyncio integration (#​2105) by @​sl0thentr0py

  • Remove relay extension from AWS Layer (#​2068) by @​sl0thentr0py

  • Add a note about pip freeze to the bug template (#​2103) by @​sentrivana

v1.22.2

Compare Source

Various fixes & improvements

v1.22.1

Compare Source

Various fixes & improvements

v1.22.0

Compare Source

Various fixes & improvements
  • Add cache.hit and cache.item_size to Django (#​2057) by @​antonpirker

    Note: This will add spans for all requests to the caches configured in Django. This will probably add some overhead to your server an also add multiple spans to your performance waterfall diagrams. If you do not want this, you can disable this feature in the DjangoIntegration:

    sentry_sdk.init(
        dsn="...",
        integrations=[
            DjangoIntegration(cache_spans=False),
        ]
    )
  • Use http.method instead of method (#​2054) by @​AbhiPrasad

  • Handle non-int exc.status_code in Starlette (#​2075) by @​sentrivana

  • Handle SQLAlchemy engine.name being bytes (#​2074) by @​sentrivana

  • Fix KeyError in capture_checkin if SDK is not initialized (#​2073) by @​antonpirker

  • Use functools.wrap for ThreadingIntegration patches to fix attributes (#​2080) by @​EpicWink

  • Pin urllib3 to <2.0.0 for now (#​2069) by @​sl0thentr0py

v1.21.1

Compare Source

Various fixes & improvements

v1.21.0

Compare Source

Various fixes & improvements
  • Better handling of redis span/breadcrumb data (#​2033) by @​antonpirker

    Note: With this release we will limit the description of redis db spans and the data in breadcrumbs represting redis db operations to 1024 characters.

    This can can lead to truncated data. If you do not want this there is a new parameter max_data_size in RedisIntegration. You can set this to None for disabling trimming.

    Example for disabling trimming of redis commands in spans or breadcrumbs:

    sentry_sdk.init(
      integrations=[
        RedisIntegration(max_data_size=None),
      ]
    )

    Example for custom trim size of redis commands in spans or breadcrumbs:

    sentry_sdk.init(
      integrations=[
        RedisIntegration(max_data_size=50),
      ]
    )`
    
  • Add db.system to redis and SQLAlchemy db spans (#​2037, #​2038, #​2039) (#​2037) by @​AbhiPrasad

  • Upgraded linting tooling (#​2026) by @​antonpirker

  • Made code more resilient. (#​2031) by @​antonpirker

v1.20.0

Compare Source

Various fixes & improvements

Configuration

📅 Schedule: 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 MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this MR and you won't be reminded about this update again.


  • If you want to rebase/retry this MR, check this box

This MR has been generated by Renovate Bot.

Merge request reports

Loading