Skip to content
Open
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
270be59
ref: Make logs, metrics go via scope
sentrivana Dec 10, 2025
c46c32d
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 11, 2025
9be698f
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 16, 2025
ddb5838
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 16, 2025
329ea2c
typing fixes
sentrivana Dec 16, 2025
6c1897a
giving up on typing dispatches
sentrivana Dec 16, 2025
8ffc78a
span_id is not an attribute anymore
sentrivana Dec 16, 2025
2405282
move format_attributes to utils
sentrivana Dec 16, 2025
a0a603b
attr list values
sentrivana Dec 16, 2025
a2fee7c
.
sentrivana Dec 16, 2025
87537f0
add link
sentrivana Dec 16, 2025
8c32833
remove custom trace_id, span_id setting
sentrivana Dec 16, 2025
3747c5f
rename, fix
sentrivana Dec 17, 2025
4dc5dd8
.
sentrivana Dec 17, 2025
6acb510
simplify
sentrivana Dec 17, 2025
2bf0f3a
.
sentrivana Dec 17, 2025
52bcfee
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 17, 2025
c83d76c
.
sentrivana Dec 17, 2025
a62d90b
first attrs, then before_send
sentrivana Dec 17, 2025
649c3ad
dont pass opts around
sentrivana Dec 17, 2025
3fffa7f
simplify dispatcher
sentrivana Dec 18, 2025
7ccbd5a
no support for array attributes yet
sentrivana Dec 18, 2025
d2cbf74
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 18, 2025
3814f3b
feat: Add scope.set_attribute
sentrivana Dec 18, 2025
9d8b3d2
put preserialization back
sentrivana Dec 18, 2025
e92c9d3
dont override
sentrivana Dec 18, 2025
0b25f46
preserialize after template, parameters
sentrivana Dec 18, 2025
3eac621
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 18, 2025
ef5f9fb
fix
sentrivana Dec 18, 2025
a56ff9b
Merge branch 'ivana/make-logs-and-metrics-go-via-scope' into ivana/sc…
sentrivana Dec 18, 2025
4ac20db
use format_attr in other places too
sentrivana Dec 18, 2025
4b8047a
.
sentrivana Dec 18, 2025
7154196
keyboard
sentrivana Dec 18, 2025
603da41
Merge branch 'master' into ivana/make-logs-and-metrics-go-via-scope
sentrivana Dec 18, 2025
5ba6bcb
Merge branch 'ivana/make-logs-and-metrics-go-via-scope' into ivana/sc…
sentrivana Dec 18, 2025
cea7d21
i am very smart
sentrivana Dec 18, 2025
1609dec
Merge branch 'master' into ivana/scope-set-attributes
sentrivana Dec 18, 2025
5aec76c
merge botched
sentrivana Dec 18, 2025
641214c
issues
sentrivana Dec 18, 2025
a3714b0
add missing 3.7 decorators in logs tests
sentrivana Dec 18, 2025
5ad9df4
docstrings
sentrivana Dec 18, 2025
7c3da6e
.
sentrivana Dec 18, 2025
b858bec
apply global attrs last, conditionally
sentrivana Dec 18, 2025
27323f1
ref: Set global attrs on global scope
sentrivana Dec 18, 2025
71cd830
.
sentrivana Dec 18, 2025
8dd9d52
Merge branch 'master' into ivana/set-global-attrs-on-global-scope
sentrivana Dec 19, 2025
eb76a3d
merge
sentrivana Dec 19, 2025
06bc982
Merge branch 'master' into ivana/set-global-attrs-on-global-scope
sentrivana Dec 19, 2025
b9e765f
Merge branch 'master' into ivana/set-global-attrs-on-global-scope
sentrivana Dec 19, 2025
b4be7aa
.
sentrivana Dec 19, 2025
c3480fb
remove old set global attrs
sentrivana Dec 19, 2025
49f7460
merge?
sentrivana Dec 19, 2025
6adfe61
.
sentrivana Dec 19, 2025
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
58 changes: 29 additions & 29 deletions sentry_sdk/scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from functools import wraps
from itertools import chain

import sentry_sdk
from sentry_sdk._types import AnnotatedValue
from sentry_sdk.attachments import Attachment
from sentry_sdk.consts import (
Expand Down Expand Up @@ -365,6 +366,26 @@ def get_global_scope(cls) -> "Scope":

return _global_scope

def set_global_attributes(self) -> None:
from sentry_sdk.client import SDK_INFO

self.set_attribute("sentry.sdk.name", SDK_INFO["name"])
self.set_attribute("sentry.sdk.version", SDK_INFO["version"])

options = sentry_sdk.get_client().options

server_name = options.get("server_name")
if server_name:
self.set_attribute(SPANDATA.SERVER_ADDRESS, server_name)

environment = options.get("environment")
if environment:
self.set_attribute("sentry.environment", environment)

release = options.get("release")
if release:
self.set_attribute("sentry.release", release)

@classmethod
def last_event_id(cls) -> "Optional[str]":
"""
Expand Down Expand Up @@ -467,7 +488,14 @@ def set_client(
If `None` the client of the scope will be replaced by a :py:class:`sentry_sdk.NonRecordingClient`.

"""
self.client = client if client is not None else NonRecordingClient()
if client is not None:
self.client = client
# We need a client to set the initial global attributes on the global
# scope since they mostly come from client options, so populate them
# as soon as a client is set
sentry_sdk.get_global_scope().set_global_attributes()
else:
self.client = NonRecordingClient()

def fork(self) -> "Scope":
"""
Expand Down Expand Up @@ -1468,33 +1496,6 @@ def _apply_flags_to_event(
{"values": flags}
)

def _apply_global_attributes_to_telemetry(
self, telemetry: "Union[Log, Metric]"
) -> None:
# TODO: Global stuff like this should just be retrieved at init time and
# put onto the global scope's attributes and then applied to events
# from there
from sentry_sdk.client import SDK_INFO

attributes = telemetry["attributes"]

attributes["sentry.sdk.name"] = SDK_INFO["name"]
attributes["sentry.sdk.version"] = SDK_INFO["version"]

options = self.get_client().options

server_name = options.get("server_name")
if server_name is not None and SPANDATA.SERVER_ADDRESS not in attributes:
attributes[SPANDATA.SERVER_ADDRESS] = server_name

environment = options.get("environment")
if environment is not None and "sentry.environment" not in attributes:
attributes["sentry.environment"] = environment

release = options.get("release")
if release is not None and "sentry.release" not in attributes:
attributes["sentry.release"] = release

def _apply_scope_attributes_to_telemetry(
self, telemetry: "Union[Log, Metric]"
) -> None:
Expand Down Expand Up @@ -1638,7 +1639,6 @@ def apply_to_telemetry(self, telemetry: "Union[Log, Metric]") -> None:

self._apply_scope_attributes_to_telemetry(telemetry)
self._apply_user_attributes_to_telemetry(telemetry)
self._apply_global_attributes_to_telemetry(telemetry)

def update_from_scope(self, scope: "Scope") -> None:
"""Update the scope with another scope's data."""
Expand Down
Loading