6
6
from sentry_sdk ._compat import text_type
7
7
from sentry_sdk ._types import MYPY
8
8
from sentry_sdk .sessions import Session
9
+ from sentry_sdk .tracing import Transaction
9
10
from sentry_sdk .utils import json_dumps
10
11
11
12
if MYPY :
@@ -50,6 +51,12 @@ def add_event(
50
51
# type: (...) -> None
51
52
self .add_item (Item (payload = PayloadRef (json = event ), type = "event" ))
52
53
54
+ def add_transaction (
55
+ self , transaction # type: Transaction
56
+ ):
57
+ # type: (...) -> None
58
+ self .add_item (Item (payload = PayloadRef (json = transaction ), type = "transaction" ))
59
+
53
60
def add_session (
54
61
self , session # type: Union[Session, Any]
55
62
):
@@ -72,6 +79,14 @@ def get_event(self):
72
79
return event
73
80
return None
74
81
82
+ def get_transaction_event (self ):
83
+ # type: (...) -> Optional[Event]
84
+ for item in self .items :
85
+ event = item .get_transaction_event ()
86
+ if event is not None :
87
+ return event
88
+ return None
89
+
75
90
def __iter__ (self ):
76
91
# type: (...) -> Iterator[Item]
77
92
return iter (self .items )
@@ -220,6 +235,11 @@ def __repr__(self):
220
235
self .data_category ,
221
236
)
222
237
238
+ @property
239
+ def type (self ):
240
+ # type: (...) -> Optional[str]
241
+ return self .headers .get ("type" )
242
+
223
243
@property
224
244
def data_category (self ):
225
245
# type: (...) -> EventDataCategory
@@ -244,7 +264,13 @@ def get_event(self):
244
264
"""
245
265
Returns an error event if there is one.
246
266
"""
247
- if self .headers .get ("type" ) == "event" and self .payload .json is not None :
267
+ if self .type == "event" and self .payload .json is not None :
268
+ return self .payload .json
269
+ return None
270
+
271
+ def get_transaction_event (self ):
272
+ # type: (...) -> Optional[Event]
273
+ if self .type == "transaction" and self .payload .json is not None :
248
274
return self .payload .json
249
275
return None
250
276
@@ -277,7 +303,7 @@ def deserialize_from(
277
303
headers = json .loads (line )
278
304
length = headers ["length" ]
279
305
payload = f .read (length )
280
- if headers .get ("type" ) == "event" :
306
+ if headers .get ("type" ) in ( "event" , "transaction" ) :
281
307
rv = cls (headers = headers , payload = PayloadRef (json = json .loads (payload )))
282
308
else :
283
309
rv = cls (headers = headers , payload = payload )
0 commit comments