Skip to content

Commit

Permalink
feat(scope): Add last_event_id to Scope
Browse files Browse the repository at this point in the history
Fixes #3049
  • Loading branch information
szokeasaurusrex committed May 10, 2024
1 parent 1a32183 commit 611588e
Showing 1 changed file with 32 additions and 4 deletions.
36 changes: 32 additions & 4 deletions sentry_sdk/scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ class Scope(object):
"_propagation_context",
"client",
"_type",
"_last_event_id",
)

def __init__(self, ty=None, client=None):
Expand All @@ -207,6 +208,9 @@ def __init__(self, ty=None, client=None):
incoming_trace_information = self._load_trace_data_from_env()
self.generate_propagation_context(incoming_data=incoming_trace_information)

# self._last_event_id is only applicable to isolation scopes
self._last_event_id = None # type: Optional[str]

def __copy__(self):
# type: () -> Scope
"""
Expand Down Expand Up @@ -308,6 +312,16 @@ def get_global_scope(cls):

return _global_scope

@classmethod
def last_event_id(cls):
# type: () -> Optional[str]
"""
.. versionadded:: 2.X.X
Returns the last event id of the isolation scope.
"""
return cls.get_isolation_scope()._last_event_id

def _merge_scopes(self, additional_scope=None, additional_scope_kwargs=None):
# type: (Optional[Scope], Optional[Dict[str, Any]]) -> Scope
"""
Expand Down Expand Up @@ -1089,7 +1103,12 @@ def capture_event(self, event, hint=None, scope=None, **scope_kwargs):
"""
scope = self._merge_scopes(scope, scope_kwargs)

return Scope.get_client().capture_event(event=event, hint=hint, scope=scope)
event_id = Scope.get_client().capture_event(event=event, hint=hint, scope=scope)

if event_id is not None and event.get("type") != "transaction":
self.get_isolation_scope()._last_event_id = event_id

return event_id

def capture_message(self, message, level=None, scope=None, **scope_kwargs):
# type: (str, Optional[LogLevelStr], Optional[Scope], Any) -> Optional[str]
Expand Down Expand Up @@ -1117,7 +1136,12 @@ def capture_message(self, message, level=None, scope=None, **scope_kwargs):
"level": level,
} # type: Event

return self.capture_event(event, scope=scope, **scope_kwargs)
event_id = self.capture_event(event, scope=scope, **scope_kwargs)

if event_id is not None:
self.get_isolation_scope()._last_event_id = event_id

return event_id

def capture_exception(self, error=None, scope=None, **scope_kwargs):
# type: (Optional[Union[BaseException, ExcInfo]], Optional[Scope], Any) -> Optional[str]
Expand All @@ -1144,11 +1168,15 @@ def capture_exception(self, error=None, scope=None, **scope_kwargs):
)

try:
return self.capture_event(event, hint=hint, scope=scope, **scope_kwargs)
event_id = self.capture_event(event, hint=hint, scope=scope, **scope_kwargs)
except Exception:
self._capture_internal_exception(sys.exc_info())
return None

return None
if event_id is not None:
self.get_isolation_scope()._last_event_id = event_id

return event_id

def _capture_internal_exception(
self, exc_info # type: Any
Expand Down

0 comments on commit 611588e

Please sign in to comment.