|
10 | 10 | get_type_name,
|
11 | 11 | capture_internal_exceptions,
|
12 | 12 | current_stacktrace,
|
| 13 | + disable_capture_event, |
13 | 14 | logger,
|
14 | 15 | )
|
15 |
| -from sentry_sdk.serializer import Serializer |
| 16 | +from sentry_sdk.serializer import serialize, partial_serialize |
16 | 17 | from sentry_sdk.transport import make_transport
|
17 | 18 | from sentry_sdk.consts import DEFAULT_OPTIONS, SDK_INFO, ClientConstructor
|
18 | 19 | from sentry_sdk.integrations import setup_integrations
|
|
31 | 32 |
|
32 | 33 |
|
33 | 34 | _client_init_debug = ContextVar("client_init_debug")
|
34 |
| -_client_in_capture_event = ContextVar("client_in_capture_event") |
35 | 35 |
|
36 | 36 |
|
37 | 37 | def _get_options(*args, **kwargs):
|
@@ -123,8 +123,13 @@ def _prepare_event(
|
123 | 123 | scope, # type: Optional[Scope]
|
124 | 124 | ):
|
125 | 125 | # type: (...) -> Optional[Event]
|
| 126 | + |
| 127 | + client = self # type: Client # type: ignore |
| 128 | + |
126 | 129 | if event.get("timestamp") is None:
|
127 |
| - event["timestamp"] = datetime.utcnow() |
| 130 | + event["timestamp"] = partial_serialize( |
| 131 | + client, datetime.utcnow(), is_databag=False, should_repr_strings=False |
| 132 | + ) |
128 | 133 |
|
129 | 134 | hint = dict(hint or ()) # type: Hint
|
130 | 135 |
|
@@ -170,8 +175,10 @@ def _prepare_event(
|
170 | 175 |
|
171 | 176 | # Postprocess the event here so that annotated types do
|
172 | 177 | # generally not surface in before_send
|
173 |
| - if event is not None: |
174 |
| - event = Serializer().serialize_event(event) |
| 178 | + if event is not None and not self.options["_experiments"].get( |
| 179 | + "fast_serialize", False |
| 180 | + ): |
| 181 | + event = serialize(event) |
175 | 182 |
|
176 | 183 | before_send = self.options["before_send"]
|
177 | 184 | if before_send is not None:
|
@@ -241,29 +248,23 @@ def capture_event(
|
241 | 248 |
|
242 | 249 | :returns: An event ID. May be `None` if there is no DSN set or of if the SDK decided to discard the event for other reasons. In such situations setting `debug=True` on `init()` may help.
|
243 | 250 | """
|
244 |
| - is_recursive = _client_in_capture_event.get(False) |
245 |
| - if is_recursive: |
| 251 | + if disable_capture_event.get(False): |
246 | 252 | return None
|
247 | 253 |
|
248 |
| - _client_in_capture_event.set(True) |
249 |
| - |
250 |
| - try: |
251 |
| - if self.transport is None: |
252 |
| - return None |
253 |
| - if hint is None: |
254 |
| - hint = {} |
255 |
| - event_id = event.get("event_id") |
256 |
| - if event_id is None: |
257 |
| - event["event_id"] = event_id = uuid.uuid4().hex |
258 |
| - if not self._should_capture(event, hint, scope): |
259 |
| - return None |
260 |
| - event_opt = self._prepare_event(event, hint, scope) |
261 |
| - if event_opt is None: |
262 |
| - return None |
263 |
| - self.transport.capture_event(event_opt) |
264 |
| - return event_id |
265 |
| - finally: |
266 |
| - _client_in_capture_event.set(False) |
| 254 | + if self.transport is None: |
| 255 | + return None |
| 256 | + if hint is None: |
| 257 | + hint = {} |
| 258 | + event_id = event.get("event_id") |
| 259 | + if event_id is None: |
| 260 | + event["event_id"] = event_id = uuid.uuid4().hex |
| 261 | + if not self._should_capture(event, hint, scope): |
| 262 | + return None |
| 263 | + event_opt = self._prepare_event(event, hint, scope) |
| 264 | + if event_opt is None: |
| 265 | + return None |
| 266 | + self.transport.capture_event(event_opt) |
| 267 | + return event_id |
267 | 268 |
|
268 | 269 | def close(
|
269 | 270 | self,
|
|
0 commit comments