Skip to content

Commit 0cd2bce

Browse files
chore: Drop more deprecated stuff (#4176)
Remove the following deprecated stuff: - `configure_debug_hub` from `debug.py` - exported stuff in `profiler/__init__.py` that's not part of public API and was only exported for backwards compat reasons - support for `_experiments['profiler_mode']` and `_experiments['profiles_sample_rate']` which both have non-experimental top-level options now - `Transport.capture_event` - `_FunctionTransport` and support for function transports in general - `enable_tracing` --------- Co-authored-by: Anton Pirker <[email protected]>
1 parent d145612 commit 0cd2bce

18 files changed

+58
-307
lines changed

MIGRATION_GUIDE.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Looking to upgrade from Sentry SDK 2.x to 3.x? Here's a comprehensive list of wh
1717
- `Span.finish()` no longer returns the `event_id` if the event is sent to sentry.
1818
- The `Profile()` constructor does not accept a `hub` parameter anymore.
1919
- A `Profile` object does not have a `.hub` property anymore.
20+
- `MAX_PROFILE_DURATION_NS`, `PROFILE_MINIMUM_SAMPLES`, `Profile`, `Scheduler`, `ThreadScheduler`, `GeventScheduler`, `has_profiling_enabled`, `setup_profiler`, `teardown_profiler` are no longer accessible from `sentry_sdk.profiler`. They're still accessible from `sentry_sdk.profiler.transaction_profiler`.
21+
- `DEFAULT_SAMPLING_FREQUENCY`, `MAX_STACK_DEPTH`, `get_frame_name`, `extract_frame`, `extract_stack`, `frame_id` are no longer accessible from `sentry_sdk.profiler`. They're still accessible from `sentry_sdk.profiler.utils`.
2022
- `sentry_sdk.continue_trace` no longer returns a `Transaction` and is now a context manager.
2123
- Redis integration: In Redis pipeline spans there is no `span["data"]["redis.commands"]` that contains a dict `{"count": 3, "first_ten": ["cmd1", "cmd2", ...]}` but instead `span["data"]["redis.commands.count"]` (containing `3`) and `span["data"]["redis.commands.first_ten"]` (containing `["cmd1", "cmd2", ...]`).
2224
- clickhouse-driver integration: The query is now available under the `db.query.text` span attribute (only if `send_default_pii` is `True`).
@@ -131,6 +133,7 @@ Looking to upgrade from Sentry SDK 2.x to 3.x? Here's a comprehensive list of wh
131133

132134
- Spans no longer have a `description`. Use `name` instead.
133135
- Dropped support for Python 3.6.
136+
- The `enable_tracing` `init` option has been removed. Configure `traces_sample_rate` directly.
134137
- The `custom_sampling_context` parameter of `start_transaction` has been removed. Use `attributes` instead to set key-value pairs of data that should be accessible in the traces sampler. Note that span attributes need to conform to the [OpenTelemetry specification](https://opentelemetry.io/docs/concepts/signals/traces/#attributes), meaning only certain types can be set as values.
135138
- The PyMongo integration no longer sets tags. The data is still accessible via span attributes.
136139
- The PyMongo integration doesn't set `operation_ids` anymore. The individual IDs (`operation_id`, `request_id`, `session_id`) are now accessible as separate span attributes.
@@ -142,13 +145,17 @@ Looking to upgrade from Sentry SDK 2.x to 3.x? Here's a comprehensive list of wh
142145
- The context manager `auto_session_tracking()` has been removed. Use `track_session()` instead.
143146
- The context manager `auto_session_tracking_scope()` has been removed. Use `track_session()` instead.
144147
- Utility function `is_auto_session_tracking_enabled()` has been removed. There is no public replacement. There is a private `_is_auto_session_tracking_enabled()` (if you absolutely need this function) It accepts a `scope` parameter instead of the previously used `hub` parameter.
145-
- Utility function `is_auto_session_tracking_enabled_scope()` has been removed. There is no public replacement. There is a private `_is_auto_session_tracking_enabled()` (if you absolutely need this function)
148+
- Utility function `is_auto_session_tracking_enabled_scope()` has been removed. There is no public replacement. There is a private `_is_auto_session_tracking_enabled()` (if you absolutely need this function).
146149
- Setting `scope.level` has been removed. Use `scope.set_level` instead.
147150
- `span.containing_transaction` has been removed. Use `span.root_span` instead.
148151
- `continue_from_headers`, `continue_from_environ` and `from_traceparent` have been removed, please use top-level API `sentry_sdk.continue_trace` instead.
149152
- `PropagationContext` constructor no longer takes a `dynamic_sampling_context` but takes a `baggage` object instead.
150153
- `ThreadingIntegration` no longer takes the `propagate_hub` argument.
151154
- `Baggage.populate_from_transaction` has been removed.
155+
- `debug.configure_debug_hub` was removed.
156+
- `profiles_sample_rate` and `profiler_mode` were removed from options available via `_experiments`. Use the top-level `profiles_sample_rate` and `profiler_mode` options instead.
157+
- `Transport.capture_event` has been removed. Use `Transport.capture_envelope` instead.
158+
- Function transports are no longer supported. Subclass the `Transport` instead.
152159

153160
### Deprecated
154161

sentry_sdk/client.py

-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from datetime import datetime, timezone
1010
from importlib import import_module
1111
from typing import TYPE_CHECKING, List, Dict, cast, overload
12-
import warnings
1312

1413
from sentry_sdk._compat import check_uwsgi_thread_support
1514
from sentry_sdk.utils import (
@@ -121,9 +120,6 @@ def _get_options(*args, **kwargs):
121120

122121
rv["project_root"] = project_root
123122

124-
if rv["enable_tracing"] is True and rv["traces_sample_rate"] is None:
125-
rv["traces_sample_rate"] = 1.0
126-
127123
if rv["event_scrubber"] is None:
128124
rv["event_scrubber"] = EventScrubber(
129125
send_default_pii=(
@@ -137,13 +133,6 @@ def _get_options(*args, **kwargs):
137133
)
138134
rv["socket_options"] = None
139135

140-
if rv["enable_tracing"] is not None:
141-
warnings.warn(
142-
"The `enable_tracing` parameter is deprecated. Please use `traces_sample_rate` instead.",
143-
DeprecationWarning,
144-
stacklevel=2,
145-
)
146-
147136
return rv
148137

149138

sentry_sdk/consts.py

-4
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,6 @@ def __init__(
526526
proxy_headers=None, # type: Optional[Dict[str, str]]
527527
before_send_transaction=None, # type: Optional[TransactionProcessor]
528528
project_root=None, # type: Optional[str]
529-
enable_tracing=None, # type: Optional[bool]
530529
include_local_variables=True, # type: Optional[bool]
531530
include_source_context=True, # type: Optional[bool]
532531
trace_propagation_targets=[ # noqa: B006
@@ -915,9 +914,6 @@ def __init__(
915914
916915
:param profile_session_sample_rate:
917916
918-
919-
:param enable_tracing:
920-
921917
:param propagate_traces:
922918
923919
:param auto_session_tracking:

sentry_sdk/debug.py

-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import sys
22
import logging
3-
import warnings
43

54
from sentry_sdk import get_client
65
from sentry_sdk.client import _client_init_debug
@@ -30,12 +29,3 @@ def configure_logger():
3029
logger.addHandler(_handler)
3130
logger.setLevel(logging.DEBUG)
3231
logger.addFilter(_DebugFilter())
33-
34-
35-
def configure_debug_hub():
36-
# type: () -> None
37-
warnings.warn(
38-
"configure_debug_hub is deprecated. Please remove calls to it, as it is a no-op.",
39-
DeprecationWarning,
40-
stacklevel=2,
41-
)

sentry_sdk/profiler/__init__.py

-36
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,8 @@
22
start_profiler,
33
stop_profiler,
44
)
5-
from sentry_sdk.profiler.transaction_profiler import (
6-
MAX_PROFILE_DURATION_NS,
7-
PROFILE_MINIMUM_SAMPLES,
8-
Profile,
9-
Scheduler,
10-
ThreadScheduler,
11-
GeventScheduler,
12-
has_profiling_enabled,
13-
setup_profiler,
14-
teardown_profiler,
15-
)
16-
from sentry_sdk.profiler.utils import (
17-
DEFAULT_SAMPLING_FREQUENCY,
18-
MAX_STACK_DEPTH,
19-
get_frame_name,
20-
extract_frame,
21-
extract_stack,
22-
frame_id,
23-
)
245

256
__all__ = [
267
"start_profiler",
278
"stop_profiler",
28-
# DEPRECATED: The following was re-exported for backwards compatibility. It
29-
# will be removed from sentry_sdk.profiler in a future release.
30-
"MAX_PROFILE_DURATION_NS",
31-
"PROFILE_MINIMUM_SAMPLES",
32-
"Profile",
33-
"Scheduler",
34-
"ThreadScheduler",
35-
"GeventScheduler",
36-
"has_profiling_enabled",
37-
"setup_profiler",
38-
"teardown_profiler",
39-
"DEFAULT_SAMPLING_FREQUENCY",
40-
"MAX_STACK_DEPTH",
41-
"get_frame_name",
42-
"extract_frame",
43-
"extract_stack",
44-
"frame_id",
459
]

sentry_sdk/profiler/continuous_profiler.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,9 @@ def setup_continuous_profiler(options, sdk_info, capture_func):
8787
else:
8888
default_profiler_mode = ThreadContinuousScheduler.mode
8989

90+
profiler_mode = default_profiler_mode
9091
if options.get("profiler_mode") is not None:
9192
profiler_mode = options["profiler_mode"]
92-
else:
93-
# TODO: deprecate this and just use the existing `profiler_mode`
94-
experiments = options.get("_experiments", {})
95-
96-
profiler_mode = (
97-
experiments.get("continuous_profiling_mode") or default_profiler_mode
98-
)
9993

10094
frequency = DEFAULT_SAMPLING_FREQUENCY
10195

sentry_sdk/profiler/transaction_profiler.py

+2-20
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,6 @@ def has_profiling_enabled(options):
125125
if profiles_sample_rate is not None and profiles_sample_rate > 0:
126126
return True
127127

128-
profiles_sample_rate = options["_experiments"].get("profiles_sample_rate")
129-
if profiles_sample_rate is not None:
130-
logger.warning(
131-
"_experiments['profiles_sample_rate'] is deprecated. "
132-
"Please use the non-experimental profiles_sample_rate option "
133-
"directly."
134-
)
135-
if profiles_sample_rate > 0:
136-
return True
137-
138128
return False
139129

140130

@@ -157,16 +147,9 @@ def setup_profiler(options):
157147
else:
158148
default_profiler_mode = ThreadScheduler.mode
159149

150+
profiler_mode = default_profiler_mode
160151
if options.get("profiler_mode") is not None:
161152
profiler_mode = options["profiler_mode"]
162-
else:
163-
profiler_mode = options.get("_experiments", {}).get("profiler_mode")
164-
if profiler_mode is not None:
165-
logger.warning(
166-
"_experiments['profiler_mode'] is deprecated. Please use the "
167-
"non-experimental profiler_mode option directly."
168-
)
169-
profiler_mode = profiler_mode or default_profiler_mode
170153

171154
if (
172155
profiler_mode == ThreadScheduler.mode
@@ -283,12 +266,11 @@ def _set_initial_sampling_decision(self, sampling_context):
283266

284267
options = client.options
285268

269+
sample_rate = None
286270
if callable(options.get("profiles_sampler")):
287271
sample_rate = options["profiles_sampler"](sampling_context)
288272
elif options["profiles_sample_rate"] is not None:
289273
sample_rate = options["profiles_sample_rate"]
290-
else:
291-
sample_rate = options["_experiments"].get("profiles_sample_rate")
292274

293275
# The profiles_sample_rate option was not set, so profiling
294276
# was never enabled.

sentry_sdk/tracing_utils.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,14 @@ def has_tracing_enabled(options):
9393
# type: (Optional[Dict[str, Any]]) -> bool
9494
"""
9595
Returns True if either traces_sample_rate or traces_sampler is
96-
defined and enable_tracing is set and not false.
96+
defined.
9797
"""
9898
if options is None:
9999
return False
100100

101101
return bool(
102-
options.get("enable_tracing") is not False
103-
and (
104-
options.get("traces_sample_rate") is not None
105-
or options.get("traces_sampler") is not None
106-
)
102+
options.get("traces_sample_rate") is not None
103+
or options.get("traces_sampler") is not None
107104
)
108105

109106

sentry_sdk/transport.py

+1-58
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import socket
66
import ssl
77
import time
8-
import warnings
98
from datetime import datetime, timedelta, timezone
109
from collections import defaultdict
1110
from urllib.request import getproxies
@@ -40,7 +39,7 @@
4039
from urllib3.poolmanager import PoolManager
4140
from urllib3.poolmanager import ProxyManager
4241

43-
from sentry_sdk._types import Event, EventDataCategory
42+
from sentry_sdk._types import EventDataCategory
4443

4544
KEEP_ALIVE_SOCKET_OPTIONS = []
4645
for option in [
@@ -73,25 +72,6 @@ def __init__(self, options=None):
7372
else:
7473
self.parsed_dsn = None
7574

76-
def capture_event(self, event):
77-
# type: (Self, Event) -> None
78-
"""
79-
DEPRECATED: Please use capture_envelope instead.
80-
81-
This gets invoked with the event dictionary when an event should
82-
be sent to sentry.
83-
"""
84-
85-
warnings.warn(
86-
"capture_event is deprecated, please use capture_envelope instead!",
87-
DeprecationWarning,
88-
stacklevel=2,
89-
)
90-
91-
envelope = Envelope()
92-
envelope.add_event(event)
93-
self.capture_envelope(envelope)
94-
9575
@abstractmethod
9676
def capture_envelope(self, envelope):
9777
# type: (Self, Envelope) -> None
@@ -806,35 +786,6 @@ def _make_pool(self):
806786
return httpcore.ConnectionPool(**opts)
807787

808788

809-
class _FunctionTransport(Transport):
810-
"""
811-
DEPRECATED: Users wishing to provide a custom transport should subclass
812-
the Transport class, rather than providing a function.
813-
"""
814-
815-
def __init__(
816-
self, func # type: Callable[[Event], None]
817-
):
818-
# type: (...) -> None
819-
Transport.__init__(self)
820-
self._func = func
821-
822-
def capture_event(
823-
self, event # type: Event
824-
):
825-
# type: (...) -> None
826-
self._func(event)
827-
return None
828-
829-
def capture_envelope(self, envelope: Envelope) -> None:
830-
# Since function transports expect to be called with an event, we need
831-
# to iterate over the envelope and call the function for each event, via
832-
# the deprecated capture_event method.
833-
event = envelope.get_event()
834-
if event is not None:
835-
self.capture_event(event)
836-
837-
838789
def make_transport(options):
839790
# type: (Dict[str, Any]) -> Optional[Transport]
840791
ref_transport = options["transport"]
@@ -850,14 +801,6 @@ def make_transport(options):
850801
return ref_transport
851802
elif isinstance(ref_transport, type) and issubclass(ref_transport, Transport):
852803
transport_cls = ref_transport
853-
elif callable(ref_transport):
854-
warnings.warn(
855-
"Function transports are deprecated and will be removed in a future release."
856-
"Please provide a Transport instance or subclass, instead.",
857-
DeprecationWarning,
858-
stacklevel=2,
859-
)
860-
return _FunctionTransport(ref_transport)
861804

862805
# if a transport class is given only instantiate it if the dsn is not
863806
# empty or None

tests/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
_installed_integrations,
2929
_processed_integrations,
3030
)
31-
from sentry_sdk.profiler import teardown_profiler
31+
from sentry_sdk.profiler.transaction_profiler import teardown_profiler
3232
from sentry_sdk.profiler.continuous_profiler import teardown_continuous_profiler
3333
from sentry_sdk.transport import Transport
3434
from sentry_sdk.utils import reraise

0 commit comments

Comments
 (0)