Skip to content
Merged
Show file tree
Hide file tree
Changes from 118 commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
946decc
ref: Remove flag storage from StreamedSpan
sentrivana Mar 5, 2026
f3ee55c
ref: Tweak StreamedSpan interface
sentrivana Mar 5, 2026
47ed910
Add missing logger
sentrivana Mar 5, 2026
5023c76
fixes
sentrivana Mar 5, 2026
6445447
ref: Add active to StreamedSpan
sentrivana Mar 5, 2026
47e6211
Add property
sentrivana Mar 5, 2026
1e7b694
ref: Add no-op streaming span class
sentrivana Mar 5, 2026
80bfe5a
Remove redundant stuff
sentrivana Mar 5, 2026
1f0ffc1
Merge branch 'master' into ivana/span-first-4-add-noop-span
sentrivana Mar 5, 2026
d773428
ref: Add experimental streaming API
sentrivana Mar 5, 2026
647fa79
reformat
sentrivana Mar 5, 2026
49bdbe6
Add a __repr__
sentrivana Mar 5, 2026
cdd8bd6
Merge branch 'master' into ivana/span-first-5-add-start-span-api
sentrivana Mar 5, 2026
54f81af
ref: Add new_trace, continue_trace to span first
sentrivana Mar 5, 2026
941863e
ref: Add streaming trace decorator
sentrivana Mar 5, 2026
4b14e8d
Remove redundant code
sentrivana Mar 5, 2026
474f8e6
simplify
sentrivana Mar 5, 2026
9996e29
Merge branch 'ivana/span-first-5-add-start-span-api' into ivana/span-…
sentrivana Mar 5, 2026
e20d4fd
Merge branch 'ivana/span-first-6-add-continue-and-new-trace' into iva…
sentrivana Mar 5, 2026
f2738ff
reorder imports
sentrivana Mar 5, 2026
7874a54
ref: Per-bucket limits, fix envelope chunking
sentrivana Mar 5, 2026
63a9396
.
sentrivana Mar 5, 2026
c974d3e
add dummy __enter__, __exit__
sentrivana Mar 5, 2026
5d8c238
Merge branch 'ivana/span-first-7-add-trace-decorator' into ivana/span…
sentrivana Mar 5, 2026
831adae
type hint
sentrivana Mar 5, 2026
656ef2e
Merge branch 'ivana/span-first-7-add-trace-decorator' into ivana/span…
sentrivana Mar 5, 2026
1dcf176
remove unused import
sentrivana Mar 5, 2026
0a7eae8
ref: Allow to start and finish StreamedSpans
sentrivana Mar 5, 2026
6888c56
Add end, finish to noop spans
sentrivana Mar 6, 2026
09e5cce
fixes
sentrivana Mar 6, 2026
ae2fd52
.
sentrivana Mar 6, 2026
f223574
Correctly detect user-set parent_span=None
sentrivana Mar 6, 2026
05a4157
Merge branch 'master' into ivana/span-first-5-add-start-span-api
sentrivana Mar 6, 2026
9e8e60e
mypy
sentrivana Mar 6, 2026
777a246
Merge branch 'ivana/span-first-5-add-start-span-api' into ivana/span-…
sentrivana Mar 6, 2026
9b1e2f3
Merge branch 'ivana/span-first-6-add-continue-and-new-trace' into iva…
sentrivana Mar 6, 2026
e589c53
Merge branch 'ivana/span-first-7-add-trace-decorator' into ivana/span…
sentrivana Mar 6, 2026
1487ea8
Merge branch 'ivana/span-first-8-bucket-based-limits-in-batcher' into…
sentrivana Mar 6, 2026
1006e7b
remove unused imports
sentrivana Mar 6, 2026
6c16dbf
Merge branch 'ivana/span-first-7-add-trace-decorator' into ivana/span…
sentrivana Mar 6, 2026
cb37a07
Merge branch 'ivana/span-first-8-bucket-based-limits-in-batcher' into…
sentrivana Mar 6, 2026
ad6e7cc
move where finished is set
sentrivana Mar 6, 2026
ba29f0c
remove finished
sentrivana Mar 6, 2026
d6a42b2
end_timestamp improvements
sentrivana Mar 6, 2026
5e20ad3
.
sentrivana Mar 6, 2026
c70fae4
fix
sentrivana Mar 6, 2026
b995770
simplify
sentrivana Mar 6, 2026
0235053
Merge branch 'master' into ivana/span-first-9-start-end
sentrivana Mar 9, 2026
60217e1
ref: Add warnings to span streaming APIs
sentrivana Mar 9, 2026
b673a09
Merge branch 'master' into ivana/span-first-9-start-end
sentrivana Mar 9, 2026
d6fa965
.
sentrivana Mar 9, 2026
3602f86
.
sentrivana Mar 9, 2026
9f59eb0
fix
sentrivana Mar 9, 2026
bd8e1c9
Merge branch 'ivana/span-first-9-start-end' into ivana/span-first-10-…
sentrivana Mar 9, 2026
9b3df81
Merge branch 'master' into ivana/span-first-10-random-improvements
sentrivana Mar 9, 2026
8614d52
Merge branch 'master' into ivana/span-first-9-start-end
sentrivana Mar 9, 2026
cdee8bc
Merge branch 'ivana/span-first-9-start-end' into ivana/span-first-10-…
sentrivana Mar 9, 2026
72f0968
move
sentrivana Mar 9, 2026
dab1970
add a guard
sentrivana Mar 9, 2026
7daa720
.
sentrivana Mar 9, 2026
b59f3cd
move warnings
sentrivana Mar 9, 2026
2f0dc01
.
sentrivana Mar 9, 2026
dc81637
Merge branch 'ivana/span-first-9-start-end' into ivana/span-first-10-…
sentrivana Mar 9, 2026
bc9f765
Merge branch 'master' into ivana/span-first-9-start-end
sentrivana Mar 9, 2026
45372c1
Merge branch 'ivana/span-first-9-start-end' into ivana/span-first-10-…
sentrivana Mar 9, 2026
c5fcb3e
ref: Add sampling to span first
sentrivana Mar 9, 2026
51342fb
add sample_rate, sample_rate to spans
sentrivana Mar 9, 2026
336b643
order
sentrivana Mar 9, 2026
aba1b50
make private
sentrivana Mar 9, 2026
1e22ed0
ref: Add _is_segment to streaming spans
sentrivana Mar 9, 2026
8a77d5b
tests: Add span streaming tests
sentrivana Mar 9, 2026
09b88f0
dont redefine slots
sentrivana Mar 9, 2026
2ac24d3
redundant slots
sentrivana Mar 9, 2026
a9b33a9
Merge branch 'ivana/span-first-9-start-end' into ivana/span-first-10-…
sentrivana Mar 9, 2026
4ba4351
Merge branch 'ivana/span-first-10-random-improvements' into ivana/spa…
sentrivana Mar 9, 2026
ed09e81
Merge branch 'ivana/span-first-11-sampling' into ivana/span-first-12-…
sentrivana Mar 9, 2026
6ecad5c
Merge branch 'ivana/span-first-12-is-segment' into ivana/span-first-1…
sentrivana Mar 9, 2026
12d7ff7
.
sentrivana Mar 9, 2026
8e3de76
fix comp
sentrivana Mar 9, 2026
2448092
unused imports
sentrivana Mar 9, 2026
5d8c5f3
Merge branch 'master' into ivana/span-first-11-sampling
sentrivana Mar 10, 2026
73e33ea
.
sentrivana Mar 10, 2026
bd9e0a3
add finished to noop span
sentrivana Mar 10, 2026
918609c
.
sentrivana Mar 10, 2026
e850994
improvements
sentrivana Mar 10, 2026
f816c0a
.
sentrivana Mar 10, 2026
989447d
Merge branch 'ivana/span-first-11-sampling' into ivana/span-first-12-…
sentrivana Mar 10, 2026
c614249
Merge branch 'ivana/span-first-12-is-segment' into ivana/span-first-1…
sentrivana Mar 10, 2026
fd78adf
ref: Add support for custom sampling context to span first
sentrivana Mar 10, 2026
cb75f15
Merge branch 'master' into ivana/span-first-13-tests
sentrivana Mar 11, 2026
f178dea
Merge branch 'ivana/span-first-13-tests' into ivana/span-first-14-cus…
sentrivana Mar 11, 2026
d1618c4
test name
sentrivana Mar 11, 2026
c640251
put sampling context into subdict
sentrivana Mar 11, 2026
7403dd2
Merge branch 'master' into ivana/span-first-14-custom-sampling-context
sentrivana Mar 11, 2026
493706e
ref: Add span filtering to span first
sentrivana Mar 11, 2026
8f04a74
simplify
sentrivana Mar 11, 2026
a834583
mypy
sentrivana Mar 11, 2026
7a5c168
ref: Add thread ID, name to attributes
sentrivana Mar 11, 2026
bf62edc
.
sentrivana Mar 11, 2026
0eca88b
change to fullmatch
sentrivana Mar 11, 2026
5286dd0
Merge branch 'master' into ivana/span-first-15-ignore-spans
sentrivana Mar 11, 2026
e175733
Merge branch 'ivana/span-first-15-ignore-spans' into ivana/span-first…
sentrivana Mar 11, 2026
84cbbd7
ref: Add missing data category
sentrivana Mar 11, 2026
fea3b9b
ref: Span first trace propagation
sentrivana Mar 11, 2026
5f26797
compat, making mypy happy
sentrivana Mar 11, 2026
cc772a0
.
sentrivana Mar 11, 2026
52cd46d
.
sentrivana Mar 11, 2026
a656540
.
sentrivana Mar 11, 2026
9ef960f
Merge branch 'master' into ivana/span-first-15-ignore-spans
sentrivana Mar 12, 2026
493e0fd
Merge branch 'master' into ivana/span-first-15-ignore-spans
sentrivana Mar 12, 2026
d64b0ee
Merge branch 'ivana/span-first-15-ignore-spans' into ivana/span-first…
sentrivana Mar 12, 2026
d472364
Merge branch 'ivana/span-first-16-thread-attrs' into ivana/span-first…
sentrivana Mar 12, 2026
c828afb
Merge branch 'ivana/span-first-17-missing-data-category' into ivana/s…
sentrivana Mar 12, 2026
eaa93b3
Merge branch 'master' into ivana/span-first-18-trace-propagation
sentrivana Mar 12, 2026
98abb6a
Merge branch 'master' into ivana/span-first-18-trace-propagation
sentrivana Mar 12, 2026
e6f207d
mypy
sentrivana Mar 12, 2026
4f75492
ref(graphene): Simplify span creation (#5648)
sentrivana Mar 12, 2026
f2291ac
Merge branch 'master' into ivana/span-first-18-trace-propagation
sentrivana Mar 12, 2026
9458911
mypy
sentrivana Mar 12, 2026
59b18de
.
sentrivana Mar 12, 2026
6663470
.
sentrivana Mar 12, 2026
7849c2d
Merge branch 'master' into ivana/span-first-18-trace-propagation
sentrivana Mar 13, 2026
658cfad
Merge branch 'master' into ivana/span-first-18-trace-propagation
sentrivana Mar 13, 2026
0466a91
.
sentrivana Mar 13, 2026
a5f0069
extra noopguard
sentrivana Mar 13, 2026
1757fdb
.
sentrivana Mar 13, 2026
7ada1f3
feat(anthropic): Add `gen_ai.system` attribute to spans (#5661)
ericapisani Mar 13, 2026
5175324
Merge branch 'master' into ivana/span-first-18-trace-propagation
sentrivana Mar 16, 2026
acc7126
span status test
sentrivana Mar 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions sentry_sdk/_span_batcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,7 @@ def _flush(self) -> None:
envelopes = []
for trace_id, spans in self._span_buffer.items():
if spans:
# TODO[span-first]
# dsc = spans[0].dynamic_sampling_context()
dsc = None
dsc = spans[0]._dynamic_sampling_context()

# Max per envelope is 1000, so if we happen to have more than
# 1000 spans in one bucket, we'll need to separate them.
Expand Down
8 changes: 8 additions & 0 deletions sentry_sdk/ai/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import sentry_sdk
from sentry_sdk.utils import logger
from sentry_sdk.tracing_utils import has_span_streaming_enabled

MAX_GEN_AI_MESSAGE_BYTES = 20_000 # 20KB
# Maximum characters when only a single message is left after bytes truncation
Expand Down Expand Up @@ -525,7 +526,14 @@ def normalize_message_roles(messages: "list[dict[str, Any]]") -> "list[dict[str,


def get_start_span_function() -> "Callable[..., Any]":
if has_span_streaming_enabled(sentry_sdk.get_client().options):
return sentry_sdk.traces.start_span
Comment thread
sentrivana marked this conversation as resolved.

current_span = sentry_sdk.get_current_span()
if not isinstance(current_span, Span):
# mypy
return sentry_sdk.traces.start_span
Comment thread
sentry-warden[bot] marked this conversation as resolved.
Outdated

transaction_exists = (
current_span is not None and current_span.containing_transaction is not None
)
Expand Down
16 changes: 15 additions & 1 deletion sentry_sdk/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from sentry_sdk._init_implementation import init
from sentry_sdk.consts import INSTRUMENTER
from sentry_sdk.scope import Scope, _ScopeManager, new_scope, isolation_scope
from sentry_sdk.traces import StreamedSpan
from sentry_sdk.tracing import NoOpSpan, Transaction, trace
from sentry_sdk.crons import monitor

Expand Down Expand Up @@ -37,6 +38,7 @@
LogLevelStr,
SamplingContext,
)
from sentry_sdk.traces import StreamedSpan
from sentry_sdk.tracing import Span, TransactionKwargs

T = TypeVar("T")
Expand Down Expand Up @@ -409,7 +411,9 @@ def set_measurement(name: str, value: float, unit: "MeasurementUnit" = "") -> No
transaction.set_measurement(name, value, unit)


def get_current_span(scope: "Optional[Scope]" = None) -> "Optional[Span]":
def get_current_span(
scope: "Optional[Scope]" = None,
) -> "Optional[Union[Span, StreamedSpan]]":
"""
Returns the currently active span if there is one running, otherwise `None`
"""
Expand Down Expand Up @@ -525,6 +529,16 @@ def update_current_span(
if current_span is None:
return

if isinstance(current_span, StreamedSpan):
Comment thread
github-actions[bot] marked this conversation as resolved.
warnings.warn(
"The `update_current_span` API isn't available in streaming mode. "
"Retrieve the current span with get_current_span() and use its API "
"directly.",
DeprecationWarning,
stacklevel=2,
)
return

if op is not None:
current_span.op = op

Expand Down
3 changes: 2 additions & 1 deletion sentry_sdk/feature_flags.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import copy
import sentry_sdk
from sentry_sdk._lru_cache import LRUCache
from sentry_sdk.tracing import Span
from threading import Lock

from typing import TYPE_CHECKING, Any
Expand Down Expand Up @@ -61,5 +62,5 @@ def add_feature_flag(flag: str, result: bool) -> None:
flags.set(flag, result)

span = sentry_sdk.get_current_span()
if span:
if span and isinstance(span, Span):
span.set_flag(f"flag.evaluation.{flag}", result)
85 changes: 68 additions & 17 deletions sentry_sdk/scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -583,8 +583,12 @@ def get_traceparent(self, *args: "Any", **kwargs: "Any") -> "Optional[str]":
client = self.get_client()

# If we have an active span, return traceparent from there
if has_tracing_enabled(client.options) and self.span is not None:
return self.span.to_traceparent()
if (
has_tracing_enabled(client.options)
and self.span is not None
and not isinstance(self.span, NoOpStreamedSpan)
):
return self.span._to_traceparent()

# else return traceparent from the propagation context
return self.get_active_propagation_context().to_traceparent()
Expand All @@ -597,8 +601,12 @@ def get_baggage(self, *args: "Any", **kwargs: "Any") -> "Optional[Baggage]":
client = self.get_client()

# If we have an active span, return baggage from there
if has_tracing_enabled(client.options) and self.span is not None:
return self.span.to_baggage()
if (
has_tracing_enabled(client.options)
and self.span is not None
and not isinstance(self.span, NoOpStreamedSpan)
):
return self.span._to_baggage()
Comment thread
github-actions[bot] marked this conversation as resolved.

# else return baggage from the propagation context
return self.get_active_propagation_context().get_baggage()
Expand All @@ -607,8 +615,12 @@ def get_trace_context(self) -> "Dict[str, Any]":
"""
Returns the Sentry "trace" context from the Propagation Context.
"""
if has_tracing_enabled(self.get_client().options) and self._span is not None:
return self._span.get_trace_context()
if (
has_tracing_enabled(self.get_client().options)
and self._span is not None
and not isinstance(self.span, NoOpStreamedSpan)
):
return self._span._get_trace_context()
Comment thread
sentrivana marked this conversation as resolved.

# if we are tracing externally (otel), those values take precedence
external_propagation_context = get_external_propagation_context()
Expand Down Expand Up @@ -673,7 +685,7 @@ def iter_trace_propagation_headers(
span = span or self.span

if has_tracing_enabled(client.options) and span is not None:
for header in span.iter_headers():
for header in span._iter_headers():
Comment thread
sentrivana marked this conversation as resolved.
yield header
elif has_external_propagation_context():
# when we have an external_propagation_context (otlp)
Expand Down Expand Up @@ -720,7 +732,7 @@ def clear(self) -> None:
self.clear_breadcrumbs()
self._should_capture: bool = True

self._span: "Optional[Span]" = None
self._span: "Optional[Union[Span, StreamedSpan]]" = None
self._session: "Optional[Session]" = None
self._force_auto_session_tracking: "Optional[bool]" = None

Expand Down Expand Up @@ -774,6 +786,14 @@ def transaction(self) -> "Any":
if self._span is None:
return None

if isinstance(self._span, StreamedSpan):
warnings.warn(
"Scope.transaction is not available in streaming mode.",
DeprecationWarning,
stacklevel=2,
)
return None

# there is an orphan span on the scope
if self._span.containing_transaction is None:
return None
Expand Down Expand Up @@ -803,17 +823,36 @@ def transaction(self, value: "Any") -> None:
"Assigning to scope.transaction directly is deprecated: use scope.set_transaction_name() instead."
)
self._transaction = value
if self._span and self._span.containing_transaction:
self._span.containing_transaction.name = value
if self._span:
if isinstance(self._span, StreamedSpan):
warnings.warn(
"Scope.transaction is not available in streaming mode.",
DeprecationWarning,
stacklevel=2,
)
return None

if self._span.containing_transaction:
self._span.containing_transaction.name = value
Comment thread
sentry-warden[bot] marked this conversation as resolved.

def set_transaction_name(self, name: str, source: "Optional[str]" = None) -> None:
"""Set the transaction name and optionally the transaction source."""
self._transaction = name

if self._span and self._span.containing_transaction:
self._span.containing_transaction.name = name
if source:
self._span.containing_transaction.source = source
if self._span:
if isinstance(self._span, NoOpStreamedSpan):
return
Comment thread
github-actions[bot] marked this conversation as resolved.
Comment thread
sentrivana marked this conversation as resolved.

elif isinstance(self._span, StreamedSpan):
self._span._segment.name = name
if source:
self._span._segment.set_attribute(
"sentry.span.source", getattr(source, "value", source)
)

elif self._span.containing_transaction:
self._span.containing_transaction.name = name
if source:
self._span.containing_transaction.source = source

if source:
self._transaction_info["source"] = source
Expand All @@ -836,12 +875,12 @@ def set_user(self, value: "Optional[Dict[str, Any]]") -> None:
session.update(user=value)

@property
def span(self) -> "Optional[Span]":
def span(self) -> "Optional[Union[Span, StreamedSpan]]":
"""Get/set current tracing span or transaction."""
return self._span

@span.setter
def span(self, span: "Optional[Span]") -> None:
def span(self, span: "Optional[Union[Span, StreamedSpan]]") -> None:
self._span = span
# XXX: this differs from the implementation in JS, there Scope.setSpan
# does not set Scope._transactionName.
Expand Down Expand Up @@ -1150,6 +1189,15 @@ def start_span(
be removed in the next major version. Going forward, it should only
be used by the SDK itself.
"""
client = sentry_sdk.get_client()
if has_span_streaming_enabled(client.options):
warnings.warn(
"Scope.start_span is not available in streaming mode.",
DeprecationWarning,
stacklevel=2,
)
return NoOpSpan()

if kwargs.get("description") is not None:
warnings.warn(
"The `description` parameter is deprecated. Please use `name` instead.",
Expand All @@ -1169,6 +1217,9 @@ def start_span(

# get current span or transaction
span = self.span or self.get_isolation_scope().span
if isinstance(span, StreamedSpan):
# make mypy happy
return NoOpSpan()

if span is None:
# New spans get the `trace_id` from the scope
Expand Down
71 changes: 68 additions & 3 deletions sentry_sdk/traces.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,17 @@
)

if TYPE_CHECKING:
from typing import Any, Callable, Optional, ParamSpec, TypeVar, Union
from typing import Any, Callable, Iterator, Optional, ParamSpec, TypeVar, Union
from sentry_sdk._types import Attributes, AttributeValue

P = ParamSpec("P")
R = TypeVar("R")


BAGGAGE_HEADER_NAME = "baggage"
SENTRY_TRACE_HEADER_NAME = "sentry-trace"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate header name constants across traces.py and tracing.py

Low Severity

BAGGAGE_HEADER_NAME and SENTRY_TRACE_HEADER_NAME are now defined identically in both traces.py and tracing.py. These duplicate definitions can drift out of sync and add maintenance burden. One module could import from the other, or they could be extracted to a shared location.

Fix in Cursor Fix in Web



class SpanStatus(str, Enum):
OK = "ok"
ERROR = "error"
Expand Down Expand Up @@ -328,7 +332,7 @@ def finish(self, end_timestamp: "Optional[Union[float, datetime]]" = None) -> No
def _start(self) -> None:
if self._active:
old_span = self._scope.span
self._scope.span = self # type: ignore
self._scope.span = self
self._previous_span_on_scope = old_span

def _end(self, end_timestamp: "Optional[Union[float, datetime]]" = None) -> None:
Expand Down Expand Up @@ -463,6 +467,67 @@ def _update_active_thread(self) -> None:
if thread_name is not None:
self.set_attribute(SPANDATA.THREAD_NAME, thread_name)

def _dynamic_sampling_context(self) -> "dict[str, str]":
return self._segment._get_baggage().dynamic_sampling_context()

def _to_traceparent(self) -> str:
if self.sampled is True:
sampled = "1"
elif self.sampled is False:
sampled = "0"
else:
sampled = None

traceparent = "%s-%s" % (self.trace_id, self.span_id)
if sampled is not None:
traceparent += "-%s" % (sampled,)

return traceparent

def _to_baggage(self) -> "Optional[Baggage]":
if self._segment:
return self._segment._get_baggage()
return None

def _get_baggage(self) -> "Baggage":
"""
Return the :py:class:`~sentry_sdk.tracing_utils.Baggage` associated with
the segment.

The first time a new baggage with Sentry items is made, it will be frozen.
"""
if not self._baggage or self._baggage.mutable:
self._baggage = Baggage.populate_from_segment(self)

return self._baggage

def _iter_headers(self) -> "Iterator[tuple[str, str]]":
if not self._segment:
return
Comment thread
github-actions[bot] marked this conversation as resolved.
Comment thread
sentrivana marked this conversation as resolved.

yield SENTRY_TRACE_HEADER_NAME, self._to_traceparent()

baggage = self._segment._get_baggage().serialize()
if baggage:
yield BAGGAGE_HEADER_NAME, baggage

def _get_trace_context(self) -> "dict[str, Any]":
# Even if spans themselves are not event-based anymore, we need this
# to populate trace context on events
context: "dict[str, Any]" = {
"trace_id": self.trace_id,
"span_id": self.span_id,
"parent_span_id": self._parent_span_id,
"dynamic_sampling_context": self._dynamic_sampling_context(),
}

if "sentry.op" in self._attributes:
context["op"] = self._attributes["sentry.op"]
if "sentry.origin" in self._attributes:
context["origin"] = self._attributes["sentry.origin"]

return context


class NoOpStreamedSpan(StreamedSpan):
__slots__ = (
Expand Down Expand Up @@ -498,7 +563,7 @@ def _start(self) -> None:
return

old_span = self._scope.span
self._scope.span = self # type: ignore
self._scope.span = self
self._previous_span_on_scope = old_span

def _end(self, end_timestamp: "Optional[Union[float, datetime]]" = None) -> None:
Expand Down
17 changes: 17 additions & 0 deletions sentry_sdk/tracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,12 @@ def update_active_thread(self) -> None:
thread_id, thread_name = get_current_thread_meta()
self.set_thread(thread_id, thread_name)

# Private aliases matching StreamedSpan's private API
_to_traceparent = to_traceparent
_to_baggage = to_baggage
_iter_headers = iter_headers
_get_trace_context = get_trace_context
Comment thread
github-actions[bot] marked this conversation as resolved.


class Transaction(Span):
"""The Transaction is the root element that holds all the spans
Expand Down Expand Up @@ -1243,6 +1249,10 @@ def _set_initial_sampling_decision(
)
)

# Private aliases matching StreamedSpan's private API
_get_baggage = get_baggage
_get_trace_context = get_trace_context


class NoOpSpan(Span):
def __repr__(self) -> str:
Expand Down Expand Up @@ -1324,6 +1334,13 @@ def _set_initial_sampling_decision(
) -> None:
pass

# Private aliases matching StreamedSpan's private API
_to_traceparent = to_traceparent
_to_baggage = to_baggage
_get_baggage = get_baggage
_iter_headers = iter_headers
_get_trace_context = get_trace_context


if TYPE_CHECKING:

Expand Down
Loading
Loading