Releases: getsentry/sentry-python
2.0.1
Various fixes & improvements
- Fix: Do not use convenience decorator (#3022) by @sentrivana
- Refactoring propagation context (#2970) by @antonpirker
- Use
pidfor test database name in Django tests (#2998) by @antonpirker - Remove outdated RC mention in docs (#3018) by @sentrivana
- Delete inaccurate comment from docs (#3002) by @szokeasaurusrex
- Add Lambda function that deletes test Lambda functions (#2960) by @antonpirker
- Correct discarded transaction debug message (#3002) by @szokeasaurusrex
- Add tests for discarded transaction debug messages (#3002) by @szokeasaurusrex
- Fix comment typo in metrics (#2992) by @szokeasaurusrex
- build(deps): bump actions/checkout from 4.1.1 to 4.1.4 (#3011) by @dependabot
- build(deps): bump checkouts/data-schemas from
1e17eb5to4aa14a7(#2997) by @dependabot
2.0.0
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 customAuthenticationPolicyclass. -
The method
need_code_loationof theMetricsAggregatorwas renamed toneed_code_location. -
The
BackgroundWorkerthread used to process events was renamed fromraven-sentry.BackgroundWorkertosentry-sdk.BackgroundWorker. -
The
reraisefunction was moved fromsentry_sdk._compattosentry_sdk.utils. -
The
_ScopeManagerwas moved fromsentry_sdk.hubtosentry_sdk.scope. -
Moved the contents of
tracing_utils_py3.pytotracing_utils.py. Thestart_child_span_decoratoris now insentry_sdk.tracing_utils. -
The actual implementation of
get_current_spanwas moved tosentry_sdk.tracing_utils.sentry_sdk.get_current_spanis still accessible as part of the top-level API. -
sentry_sdk.tracing_utils.add_query_source(): Removed thehubparameter. It is not necessary anymore. -
sentry_sdk.tracing_utils.record_sql_queries(): Removed thehubparameter. It is not necessary anymore. -
sentry_sdk.tracing_utils.get_current_span()does now take ascopeinstead of ahubas parameter. -
sentry_sdk.tracing_utils.should_propagate_trace()now takes aClientinstead of aHubas first parameter. -
sentry_sdk.utils.is_sentry_url()now takes aClientinstead of aHubas first parameter. -
sentry_sdk.utils._get_contextvarsdoes not return a tuple with three values, but a tuple with two values. Thecopy_contextwas removed. -
If you create a transaction manually and later mutate the transaction in a
configure_scopeblock 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:
transaction = sentry_sdk.transaction(...) # later in the code execution: scope = sentry_sdk.Scope.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.Integrationsetup_oncesentry_sdk.metrics.Metricadd,serialize_value, andweightsentry_sdk.profiler.Schedulersetupandteardownsentry_sdk.transport.Transportcapture_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 bycapture_event(),capture_exception()andcapture_message()but the top level APIsentry_sdk.last_event_id()has been removed. - Removed support for sending events to the
/storeendpoint. Everything is now sent to the/envelopeendpoint. If you're on SaaS you don't have to worry about this, but if you're running Sentry yourself you'll need version20.6.0or higher of self-hosted Sentry. - The deprecated
with_localsconfiguration option was removed. Useinclude_local_variablesinstead. See https://docs.sentry.io/platforms/python/configuration/options/#include-local-variables. - The deprecated
request_bodiesconfiguration option was removed. Usemax_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
installmethod for custom integrations. Please usesetup_onceinstead. - Removed
sentry_sdk.tracing.Span.new_span. Usesentry_sdk.tracing.Span.start_childinstead. - Removed
sentry_sdk.tracing.Transaction.new_span. Usesentry_sdk.tracing.Transaction.start_childinstead. - Removed support for creating transactions via
sentry_sdk.tracing.Span(transaction=...). To create a transaction, please usesentry_sdk.tracing.Transaction(name=...). - Removed
sentry_sdk.utils.Auth.store_api_url. sentry_sdk.utils.Auth.get_api_url's now accepts asentry_sdk.consts.EndpointTypeenum 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 possiblesentry_sdk.consts.EndpointTypevalue. The parameter exists for future compatibility.- Removed
tracing_utils_py2.py. Thestart_child_span_decoratoris now insentry_sdk.tracing_utils. - Removed the
sentry_sdk.profiler.Scheduler.stop_profilingmethod. Any calls to this method can simply be removed, since this was a no-op method.
Deprecated
-
Using the
Hubdirectly as well as using hub-based APIs has been deprecated. Where available, use the top-level API instead; otherwise use the scope API or the client API.Before:
with hub.start_span(...): # do something
After:
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:
import sentry_sdk with sentry_sdk.isolation_scope() as scope: # do something with the forked scope
-
configure_scopeis deprecated. Use the new isolation scope directly viaScope.get_isolation_scope()instead.Before:
with configure_scope() as scope: # do something with `scope`
After:
from sentry_sdk.scope import Scope scope = Scope.get_isolation_scope() # do something with `scope`
-
push_scopeis deprecated. Use the newnew_scopecontext manager to fork the necessary scopes.Before:
with push_scope() as scope: # do something with `scope`
After:
import sentry_sdk with sentry_sdk.new_scope() as scope: # do something with `scope`
-
Accessing the client via the hub has been deprecated. Use the top-level
sentry_sdk.get_client()to get the current client. -
profiler_modeandprofiles_sample_ratehave been deprecated as_experimentsoptions. Use them as top level options instead:sentry_sdk.init( ..., profiler_mode="thread", profiles_sample_rate=1.0, )
-
Deprecated
sentry_sdk.transport.Transport.capture_event. Please usesentry_sdk.transport.Transport.capture_envelope, instead. -
Passing a function to
sentry_sdk.init'stransportkeyword argument has been deprecated. If you wish to provide a custom transport, please pass asentry_sdk.transport.Transportinstance or a subclass. -
The parameter
propagate_hubinThreadingIntegration()was deprecated and renamed topropagate_scope.
2.0.0rc6
Various fixes & improvements
- Restore original behavior by always creating a span (#3005) by @antonpirker
- Merge baggage headers (incoming and new created ones) (#3001) by @antonpirker
- Fix duplicate baggage headers in Celery integration introduced in SDK 2.0 (#2993) by @antonpirker
- Make it work with old and new newrelic versions (#2999) by @antonpirker
- docs: Update migration guide wording (#2987) by @colin-sentry
- docs: Tweak migration guide (#2979) by @colin-sentry
- Small updates to migration guide (#2911) by @colin-sentry
- Update CHANGELOG.md (51a906c) by @sentrivana
- release: 1.45.0 (7570e39) by @getsentry-bot
2.0.0rc5
Update CHANGELOG.md
1.45.0
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_configto themonitordecorator/context manager directly:from sentry_sdk.crons import monitor # All keys except `schedule` are optional monitor_config = { "schedule": {"type": "crontab", "value": "0 0 * * *"}, "timezone": "Europe/Vienna", "checkin_margin": 10, "max_runtime": 10, "failure_issue_threshold": 5, "recovery_threshold": 5, } @monitor(monitor_slug='<monitor-slug>', monitor_config=monitor_config) def tell_the_world(): print('My scheduled task...')
Check out the cron docs for details.
-
Add Django
signals_denylistto filter signals that are attached to bysignals_spans(#2758) by @lieryanIf you want to exclude some Django signals from performance tracking, you can use the new
signals_denylistDjango option:import django.db.models.signals import sentry_sdk sentry_sdk.init( ... integrations=[ DjangoIntegration( ... signals_denylist=[ django.db.models.signals.pre_init, django.db.models.signals.post_init, ], ), ], )
-
incrementfor metrics (#2588) by @mitsuhikoincrementandincrare equivalent, so you can pick whichever you like more. -
Add
value,unittobefore_emit_metric(#2958) by @sentrivanaIf you add a custom
before_emit_metric, it'll now accept 4 arguments (thekey,value,unitandtags) instead of justkeyandtags.def before_emit(key, value, unit, tags): if key == "removed-metric": return False tags["extra"] = "foo" del tags["release"] return True sentry_sdk.init( ... _experiments={ "before_emit_metric": before_emit, } )
-
Remove experimental metric summary options (#2957) by @sentrivana
The
_experimentsoptionsmetrics_summary_sample_rateandshould_summarize_metrichave been removed. -
New normalization rules for metric keys, names, units, tags (#2946) by @sentrivana
-
Change
data_categoryfromstatsdtometric_bucket(#2954) by @cleptric -
Accessing
__mro__might throw aValueError(#2952) by @sentrivana -
Suppress prompt spawned by subprocess when using
pythonw(#2936) by @collinbanko -
Do not send "quiet" Sanic exceptions to Sentry (#2821) by @hamedsh
-
Fix type hints for
monitordecorator (#2944) by @szokeasaurusrex -
Remove deprecated
typingimports in crons (#2945) by @szokeasaurusrex -
Make
monitor_configaTypedDict(#2931) by @sentrivana -
Add
devenv-requirements.txtand update env setup instructions (#2761) by @arr-ee -
Bump
types-protobuffrom4.24.0.20240311to4.24.0.20240408(#2941) by @dependabot -
Disable Codecov check run annotations (#2537) by @eliatcodecov
2.0.0rc4
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
-
The Pyramid integration will not capture errors that might happen in
authenticated_userid()in a customAuthenticationPolicyclass. -
The method
need_code_loationof theMetricsAggregatorwas renamed toneed_code_location. -
The
BackgroundWorkerthread used to process events was renamed fromraven-sentry.BackgroundWorkertosentry-sdk.BackgroundWorker. -
The
reraisefunction was moved fromsentry_sdk._compattosentry_sdk.utils. -
The
_ScopeManagerwas moved fromsentry_sdk.hubtosentry_sdk.scope. -
Moved the contents of
tracing_utils_py3.pytotracing_utils.py. Thestart_child_span_decoratoris now insentry_sdk.tracing_utils. -
The actual implementation of
get_current_spanwas moved tosentry_sdk.tracing_utils.sentry_sdk.get_current_spanis still accessible as part of the top-level API. -
sentry_sdk.tracing_utils.add_query_source(): Removed thehubparameter. It is not necessary anymore. -
sentry_sdk.tracing_utils.record_sql_queries(): Removed thehubparameter. It is not necessary anymore. -
sentry_sdk.tracing_utils.get_current_span()does now take ascopeinstead of ahubas parameter. -
sentry_sdk.tracing_utils.should_propagate_trace()now takes aClientinstead of aHubas first parameter. -
sentry_sdk.utils.is_sentry_url()now takes aClientinstead of aHubas first parameter. -
sentry_sdk.utils._get_contextvarsdoes not return a tuple with three values, but a tuple with two values. Thecopy_contextwas removed. -
If you create a transaction manually and later mutate the transaction in a
configure_scopeblock 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:
transaction = sentry_sdk.transaction(...) # later in the code execution: scope = sentry_sdk.Scope.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.Integrationsetup_oncesentry_sdk.metrics.Metricadd,serialize_value, andweightsentry_sdk.profiler.Schedulersetupandteardownsentry_sdk.transport.Transportcapture_envelope
Removed
- 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 bycapture_event(),capture_exception()andcapture_message()but the top level APIsentry_sdk.last_event_id()has been removed. - Removed support for sending events to the
/storeendpoint. Everything is now sent to the/envelopeendpoint. If you're on SaaS you don't have to worry about this, but if you're running Sentry yourself you'll need version20.6.0or higher of self-hosted Sentry. - The deprecated
with_localsconfiguration option was removed. Useinclude_local_variablesinstead. See https://docs.sentry.io/platforms/python/configuration/options/#include-local-variables. - The deprecated
request_bodiesconfiguration option was removed. Usemax_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
installmethod for custom integrations. Please usesetup_onceinstead. - Removed
sentry_sdk.tracing.Span.new_span. Usesentry_sdk.tracing.Span.start_childinstead. - Removed
sentry_sdk.tracing.Transaction.new_span. Usesentry_sdk.tracing.Transaction.start_childinstead. - Removed support for creating transactions via
sentry_sdk.tracing.Span(transaction=...). To create a transaction, please usesentry_sdk.tracing.Transaction(name=...). - Removed
sentry_sdk.utils.Auth.store_api_url. sentry_sdk.utils.Auth.get_api_url's now accepts asentry_sdk.consts.EndpointTypeenum 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 possiblesentry_sdk.consts.EndpointTypevalue. The parameter exists for future compatibility.- Removed
tracing_utils_py2.py. Thestart_child_span_decoratoris now insentry_sdk.tracing_utils. - Removed the
sentry_sdk.profiler.Scheduler.stop_profilingmethod. Any calls to this method can simply be removed, since this was a no-op method.
Deprecated
-
Using the
Hubdirectly as well as using hub-based APIs has been deprecated. Where available, use the top-level API instead; otherwise use the scope API or the client API.Before:
with hub.start_span(...): # do something
After:
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:
import sentry_sdk with sentry_sdk.isolation_scope() as scope: # do something with the forked scope
-
configure_scopeis deprecated. Use the new isolation scope directly viaScope.get_isolation_scope()instead.Before:
with configure_scope() as scope: # do something with `scope`
After:
from sentry_sdk.scope import Scope scope = Scope.get_isolation_scope() # do something with `scope`
-
push_scopeis deprecated. Use the newnew_scopecontext manager to fork the necessary scopes.Before:
with push_scope() as scope: # do something with `scope`
After:
import sentry_sdk with sentry_sdk.new_scope() as scope: # do something with `scope`
-
Accessing the client via the hub has been deprecated. Use the top-level
sentry_sdk.get_client()to get the current client. -
profiler_modeandprofiles_sample_ratehave been deprecated as_experimentsoptions. Use them as top level options instead:sentry_sdk.init( ..., profiler_mode="thread", profiles_sample_rate=1.0, )
-
Deprecated
sentry_sdk.transport.Transport.capture_event. Please usesentry_sdk.transport.Transport.capture_envelope, instead. -
Passing a function to
sentry_sdk.init'stransportkeyword argument has been deprecated. If you wish to provide a custom transport, please pass asentry_sdk.transport.Transportinstance or a subclass. -
The parameter
propagate_hubinThreadingIntegration()was deprecated and renamed topropagate_scope.
1.44.1
Various fixes & improvements
-
Make
monitorasync friendly (#2912) by @sentrivanaYou can now decorate your async functions with the
monitor
decorator and they will correctly report their duration
and completion status. -
Fixed
Event | NoneruntimeTypeError(#2928) by @szokeasaurusrex
1.44.0
Various fixes & improvements
- ref: Define types at runtime (#2914) by @szokeasaurusrex
- Explicit reexport of types (#2866) (#2913) by @szokeasaurusrex
- feat(profiling): Add thread data to spans (#2843) by @Zylphrex
2.0.0rc3
Various fixes & improvements
- Use new scopes API default integrations. (#2856) by @antonpirker
- Use new scopes API in openai integration (#2853) by @antonpirker
- Use new scopes API in Celery integration. (#2851) by @antonpirker
- Use new scopes API in Django, SQLAlchemy, and asyncpg integration. (#2845) by @antonpirker
- Use new scopes API in Redis (#2854) by @sentrivana
- Use new scopes API in GQL Integration (#2838) by @szokeasaurusrex
- Use new scopes API in LoggingIntegration (#2861, #2855) by @sentrivana
- Use new scopes API in FastAPI integration (#2836) by @szokeasaurusrex
- Use new scopes API in Ariadne (#2850) by @szokeasaurusrex
- Add optional
keep_alive(#2842) by @sentrivana - Add support for celery-redbeat cron tasks (#2643) by @kwigley
- AWS Lambda: aws_event can be an empty list (#2849) by @sentrivana
- GQL: Remove problematic tests (#2835) by @szokeasaurusrex
- Moved
should_send_default_piiinto client (#2840) by @antonpirker should_send_default_piishortcut (#2844) by @szokeasaurusrex- Use
scope.should_send_default_piiin FastAPI integration (#2846) by @szokeasaurusrex - Patched functions decorator for integrations (#2454) by @szokeasaurusrex
- Small APIdocs improvement (#2828) by @antonpirker
- Bump checkouts/data-schemas from
ed078edto8232f17(#2832) by @dependabot - Update CHANGELOG.md (970c577) by @sentrivana
- Updated migration guide (#2859) by @antonpirker
Plus 2 more
1.43.0
Various fixes & improvements
-
Add optional
keep_alive(#2842) by @sentrivanaIf 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 (#2643) by @kwigley
The SDK now supports the Redbeat scheduler in addition to the default Celery Beat scheduler for auto instrumenting crons. See the docs for more information about how to set this up.
-
aws_eventcan be an empty list (#2849) by @sentrivana -
Re-export
Eventintypes.py(#2829) by @szokeasaurusrex -
Small API docs improvement (#2828) by @antonpirker
-
Fixed OpenAI tests (#2834) by @antonpirker
-
Bump
checkouts/data-schemasfromed078edto8232f17(#2832) by @dependabot