sentry-sdk 3.0.0a5__py2.py3-none-any.whl → 3.0.0a6__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sentry-sdk might be problematic. Click here for more details.

sentry_sdk/worker.py CHANGED
@@ -1,10 +1,12 @@
1
1
  from __future__ import annotations
2
+ from abc import ABC, abstractmethod
2
3
  import os
3
4
  import threading
5
+ import asyncio
4
6
 
5
7
  from time import sleep, time
6
8
  from sentry_sdk._queue import Queue, FullError
7
- from sentry_sdk.utils import logger
9
+ from sentry_sdk.utils import logger, mark_sentry_task_internal
8
10
  from sentry_sdk.consts import DEFAULT_QUEUE_SIZE
9
11
 
10
12
  from typing import TYPE_CHECKING
@@ -16,7 +18,65 @@ if TYPE_CHECKING:
16
18
  _TERMINATOR = object()
17
19
 
18
20
 
19
- class BackgroundWorker:
21
+ class Worker(ABC):
22
+ """
23
+ Base class for all workers.
24
+
25
+ A worker is used to process events in the background and send them to Sentry.
26
+ """
27
+
28
+ @property
29
+ @abstractmethod
30
+ def is_alive(self) -> bool:
31
+ """
32
+ Checks whether the worker is alive and running.
33
+
34
+ Returns True if the worker is alive, False otherwise.
35
+ """
36
+ pass
37
+
38
+ @abstractmethod
39
+ def kill(self) -> None:
40
+ """
41
+ Kills the worker.
42
+
43
+ This method is used to kill the worker. The queue will be drained up to the point where the worker is killed.
44
+ The worker will not be able to process any more events.
45
+ """
46
+ pass
47
+
48
+ def flush(
49
+ self, timeout: float, callback: Optional[Callable[[int, float], Any]] = None
50
+ ) -> None:
51
+ """
52
+ Flush the worker.
53
+
54
+ This method blocks until the worker has flushed all events or the specified timeout is reached.
55
+ Default implementation is a no-op, since this method may only be relevant to some workers.
56
+ Subclasses should override this method if necessary.
57
+ """
58
+ return None
59
+
60
+ @abstractmethod
61
+ def full(self) -> bool:
62
+ """
63
+ Checks whether the worker's queue is full.
64
+
65
+ Returns True if the queue is full, False otherwise.
66
+ """
67
+ pass
68
+
69
+ @abstractmethod
70
+ def submit(self, callback: Callable[[], Any]) -> bool:
71
+ """
72
+ Schedule a callback to be executed by the worker.
73
+
74
+ Returns True if the callback was scheduled, False if the queue is full.
75
+ """
76
+ pass
77
+
78
+
79
+ class BackgroundWorker(Worker):
20
80
  def __init__(self, queue_size: int = DEFAULT_QUEUE_SIZE) -> None:
21
81
  self._queue: Queue = Queue(queue_size)
22
82
  self._lock = threading.Lock()
@@ -106,7 +166,7 @@ class BackgroundWorker:
106
166
  pending = self._queue.qsize() + 1
107
167
  logger.error("flush timed out, dropped %s events", pending)
108
168
 
109
- def submit(self, callback: Callable[[], None]) -> bool:
169
+ def submit(self, callback: Callable[[], Any]) -> bool:
110
170
  self._ensure_thread()
111
171
  try:
112
172
  self._queue.put_nowait(callback)
@@ -127,3 +187,137 @@ class BackgroundWorker:
127
187
  finally:
128
188
  self._queue.task_done()
129
189
  sleep(0)
190
+
191
+
192
+ class AsyncWorker(Worker):
193
+ def __init__(self, queue_size: int = DEFAULT_QUEUE_SIZE) -> None:
194
+ self._queue: Optional[asyncio.Queue[Any]] = None
195
+ self._queue_size = queue_size
196
+ self._task: Optional[asyncio.Task[None]] = None
197
+ # Event loop needs to remain in the same process
198
+ self._task_for_pid: Optional[int] = None
199
+ self._loop: Optional[asyncio.AbstractEventLoop] = None
200
+ # Track active callback tasks so they have a strong reference and can be cancelled on kill
201
+ self._active_tasks: set[asyncio.Task[None]] = set()
202
+
203
+ @property
204
+ def is_alive(self) -> bool:
205
+ if self._task_for_pid != os.getpid():
206
+ return False
207
+ if not self._task or not self._loop:
208
+ return False
209
+ return self._loop.is_running() and not self._task.done()
210
+
211
+ def kill(self) -> None:
212
+ if self._task:
213
+ if self._queue is not None:
214
+ try:
215
+ self._queue.put_nowait(_TERMINATOR)
216
+ except asyncio.QueueFull:
217
+ logger.debug("async worker queue full, kill failed")
218
+ # Also cancel any active callback tasks
219
+ # Avoid modifying the set while cancelling tasks
220
+ tasks_to_cancel = set(self._active_tasks)
221
+ for task in tasks_to_cancel:
222
+ task.cancel()
223
+ self._active_tasks.clear()
224
+ self._loop = None
225
+ self._task = None
226
+ self._task_for_pid = None
227
+
228
+ def start(self) -> None:
229
+ if not self.is_alive:
230
+ try:
231
+ self._loop = asyncio.get_running_loop()
232
+ if self._queue is None:
233
+ self._queue = asyncio.Queue(maxsize=self._queue_size)
234
+ with mark_sentry_task_internal():
235
+ self._task = self._loop.create_task(self._target())
236
+ self._task_for_pid = os.getpid()
237
+ except RuntimeError:
238
+ # There is no event loop running
239
+ logger.warning("No event loop running, async worker not started")
240
+ self._loop = None
241
+ self._task = None
242
+ self._task_for_pid = None
243
+
244
+ def full(self) -> bool:
245
+ if self._queue is None:
246
+ return True
247
+ return self._queue.full()
248
+
249
+ def _ensure_task(self) -> None:
250
+ if not self.is_alive:
251
+ self.start()
252
+
253
+ async def _wait_flush(self, timeout: float, callback: Optional[Any] = None) -> None:
254
+ if not self._loop or not self._loop.is_running() or self._queue is None:
255
+ return
256
+
257
+ initial_timeout = min(0.1, timeout)
258
+
259
+ # Timeout on the join
260
+ try:
261
+ await asyncio.wait_for(self._queue.join(), timeout=initial_timeout)
262
+ except asyncio.TimeoutError:
263
+ pending = self._queue.qsize() + len(self._active_tasks)
264
+ logger.debug("%d event(s) pending on flush", pending)
265
+ if callback is not None:
266
+ callback(pending, timeout)
267
+
268
+ try:
269
+ remaining_timeout = timeout - initial_timeout
270
+ await asyncio.wait_for(self._queue.join(), timeout=remaining_timeout)
271
+ except asyncio.TimeoutError:
272
+ pending = self._queue.qsize() + len(self._active_tasks)
273
+ logger.error("flush timed out, dropped %s events", pending)
274
+
275
+ def flush(self, timeout: float, callback: Optional[Any] = None) -> Optional[asyncio.Task[None]]: # type: ignore[override]
276
+ if self.is_alive and timeout > 0.0 and self._loop and self._loop.is_running():
277
+ with mark_sentry_task_internal():
278
+ return self._loop.create_task(self._wait_flush(timeout, callback))
279
+ return None
280
+
281
+ def submit(self, callback: Callable[[], Any]) -> bool:
282
+ self._ensure_task()
283
+ if self._queue is None:
284
+ return False
285
+ try:
286
+ self._queue.put_nowait(callback)
287
+ return True
288
+ except asyncio.QueueFull:
289
+ return False
290
+
291
+ async def _target(self) -> None:
292
+ if self._queue is None:
293
+ return
294
+ while True:
295
+ callback = await self._queue.get()
296
+ if callback is _TERMINATOR:
297
+ self._queue.task_done()
298
+ break
299
+ # Firing tasks instead of awaiting them allows for concurrent requests
300
+ with mark_sentry_task_internal():
301
+ task = asyncio.create_task(self._process_callback(callback))
302
+ # Create a strong reference to the task so it can be cancelled on kill
303
+ # and does not get garbage collected while running
304
+ self._active_tasks.add(task)
305
+ task.add_done_callback(self._on_task_complete)
306
+ # Yield to let the event loop run other tasks
307
+ await asyncio.sleep(0)
308
+
309
+ async def _process_callback(self, callback: Callable[[], Any]) -> None:
310
+ # Callback is an async coroutine, need to await it
311
+ await callback()
312
+
313
+ def _on_task_complete(self, task: asyncio.Task[None]) -> None:
314
+ try:
315
+ task.result()
316
+ except Exception:
317
+ logger.error("Failed processing job", exc_info=True)
318
+ finally:
319
+ # Mark the task as done and remove it from the active tasks set
320
+ # This happens only after the task has completed
321
+ if self._queue is not None:
322
+ self._queue.task_done()
323
+ self._active_tasks.discard(task)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 3.0.0a5
3
+ Version: 3.0.0a6
4
4
  Summary: Python client for Sentry (https://sentry.io)
5
5
  Home-page: https://github.com/getsentry/sentry-python
6
6
  Author: Sentry Team and Contributors
@@ -64,6 +64,8 @@ Requires-Dist: grpcio>=1.21.1; extra == "grpcio"
64
64
  Requires-Dist: protobuf>=3.8.0; extra == "grpcio"
65
65
  Provides-Extra: http2
66
66
  Requires-Dist: httpcore[http2]==1.*; extra == "http2"
67
+ Provides-Extra: asyncio
68
+ Requires-Dist: httpcore[asyncio]==1.*; extra == "asyncio"
67
69
  Provides-Extra: httpx
68
70
  Requires-Dist: httpx>=0.16.0; extra == "httpx"
69
71
  Provides-Extra: huey
@@ -6,45 +6,45 @@ sentry_sdk/_lru_cache.py,sha256=H_BCecDD-7qSmcI0c6Q8i1nzBJMRBLFqXuax-ofh6wg,1189
6
6
  sentry_sdk/_queue.py,sha256=AWE9LpaPhNm4VEUiY3TJWIXfAw44D-dgFXuhZdBHF-k,11119
7
7
  sentry_sdk/_types.py,sha256=owny4XuTQM31ljk5SEGS2x-bfanue26OE5qkgWE5e5Y,8647
8
8
  sentry_sdk/_werkzeug.py,sha256=qEPz7ZYBeBkILq3snw0GnaZQbt5mItMQO9JQ3YDCCgg,3702
9
- sentry_sdk/api.py,sha256=muzQWcZ0O_9Gw-62NA-GC827E9zkxhRhvD6GPK5W0Vo,10824
9
+ sentry_sdk/api.py,sha256=QUgXqmXX0e8bRWc04gDUPpcsr-Upa_aAgdU0mS8RAXA,11058
10
10
  sentry_sdk/attachments.py,sha256=la0cbz1yc8cV4PQyM3kgArvWjGWtjxq945wgiKdaoCs,3046
11
- sentry_sdk/client.py,sha256=SYX-kvGdrNzmr0drB0J7gNkF5tbBVWpMMYopJwLR3ys,35284
12
- sentry_sdk/consts.py,sha256=6Ua20kG1lXeuq7GzKmwnT-oDcOC7zwBClBW1LRSfQn8,50993
11
+ sentry_sdk/client.py,sha256=jMRJJ6AwNseGMiP5KbionL6H6mVh5R8ofYDiKrZb8gc,38425
12
+ sentry_sdk/consts.py,sha256=5frscnj4vzLXHE2QaZoATsmC40NLmejJw5aDzdbIy4M,51036
13
13
  sentry_sdk/debug.py,sha256=ac50G-ZSRUTLhu6VVaJnc4sGsQM1lIN6qWR1AS4oTH4,773
14
14
  sentry_sdk/envelope.py,sha256=2Bmjlm7bctrtkYeWVPNGBHBAL6pMFtULUXCONeq6QY8,9118
15
15
  sentry_sdk/feature_flags.py,sha256=uLIi4SjN1EuFP59AduFS5dIzqUYOidPZUCZjuqrAbhg,2144
16
16
  sentry_sdk/logger.py,sha256=-s1mJg9tNafG3PoYJSWq2TYHac8OFM2gE3W-hABYlsI,2448
17
17
  sentry_sdk/monitor.py,sha256=TXiAhPyQTgeQyK35JCFedvO_CFLVYI8_DbUbdO83fKA,3443
18
18
  sentry_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- sentry_sdk/scope.py,sha256=z853f7t45oni1nlDlPLJfQBkiDgGEc__gYEOtcyXz_o,51773
19
+ sentry_sdk/scope.py,sha256=fQVJkgGB1wHFZTDEW-VrgpW7wTxGwE2kf9NxIJJuVdA,51738
20
20
  sentry_sdk/scrubber.py,sha256=NYMTKALIIHCu1aZaTThR3qsmcvCA4hcKpzWUacEbWpg,6006
21
21
  sentry_sdk/serializer.py,sha256=twylwvlYrP67Mq4AXVQEuNeeOVAkyIdnyvBj8yLwq7U,12360
22
22
  sentry_sdk/session.py,sha256=UunkzHmyV7rZu2a6kWMB5BZNJnQc9WiEkJnPu5aHjto,5097
23
23
  sentry_sdk/sessions.py,sha256=0puTgebSwYPNH6zq004QLe1q4VM7XOK8iCzsFfcGLzs,6069
24
24
  sentry_sdk/spotlight.py,sha256=mHFbVED17LBAaVdRJbNfE9c9NmknWTZ4Y3lkYkJkJuI,8492
25
- sentry_sdk/tracing.py,sha256=NdAKEAHg6Eycs9-dhVW2gCk0WWNlMXrtY0qrgz2WS5U,17869
26
- sentry_sdk/tracing_utils.py,sha256=osw7NwUO3vJWB1cFQgrJEao4qYWF6mRvx_-u09zxhu4,27000
27
- sentry_sdk/transport.py,sha256=MBUPJR8ZV-AtYdDRX342I_OSIhgo9h89qofTVGgajHI,28353
25
+ sentry_sdk/tracing.py,sha256=cr-cp07kb0wnilK1dErihKFo4kwqegpTAYY2Q_EktMY,20864
26
+ sentry_sdk/tracing_utils.py,sha256=o9fFdHQXgZED639k45XyiamWTYoggvYJoaCgEGxa93c,37143
27
+ sentry_sdk/transport.py,sha256=xhlXeVWYIcDHTDSxUSiCz7XX0DG0ajs-csiYqGJXMuQ,39754
28
28
  sentry_sdk/types.py,sha256=NLbnRzww2K3_oGz2GzcC8TdX5L2DXYso1-H1uCv2Hwc,1222
29
- sentry_sdk/utils.py,sha256=difP_k8p9IEEtZiXBh0eQ4YuO_nU-XztZKZXnnkSMwM,60161
30
- sentry_sdk/worker.py,sha256=eJMHzB7V4o1GxKdHCBuqKJqE3UkKtNCQ6AMsDH_wDaQ,4236
29
+ sentry_sdk/utils.py,sha256=2t0Xyepb2ddmd6ssUhjDPE9YZddBVal3KUFEjpZrMgQ,60547
30
+ sentry_sdk/worker.py,sha256=w-oRJoqM9mfOFabBfoqFb63LZ-9ch-3PngWs-Q_88X4,11345
31
31
  sentry_sdk/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  sentry_sdk/ai/monitoring.py,sha256=PYoM1Iqe4ujcGuqDx9HLvD_b0YE1qr1uwRoyPm4HQmE,5039
33
- sentry_sdk/ai/utils.py,sha256=fRJ8nBuX9EZ-jgoAD1BGnQ3CvahTLdWdek4r0yDuvpQ,1084
33
+ sentry_sdk/ai/utils.py,sha256=RAc7Os1g-2sxTTNNHI5AjNmRxP-1uXpZ2bepM3aS6gk,1196
34
34
  sentry_sdk/crons/__init__.py,sha256=3Zt6g1-pZZ12uRKKsC8QLm3XgJ4K1VYxgVpNNUygOZY,221
35
- sentry_sdk/crons/api.py,sha256=eNvLll2wbehlVtHLt5Pt7E3205tHADdjBRx8Ks8mVwI,1477
35
+ sentry_sdk/crons/api.py,sha256=LnTAMXZjzIw3KzER5VJopdppmnslTTPa46fD4VVFiNw,1685
36
36
  sentry_sdk/crons/consts.py,sha256=dXqJk5meBSu5rjlGpqAOlkpACnuUi7svQnAFoy1ZNUU,87
37
37
  sentry_sdk/crons/decorator.py,sha256=-Tx2HSIrp2xRASY4I0s-RIIUfJXVHjyEG1OjziapXXI,3655
38
38
  sentry_sdk/integrations/__init__.py,sha256=Cv9I64hgNqix7spLFYqgoBBOqSaw1kcGkMXvaD5F4Ks,10280
39
39
  sentry_sdk/integrations/_asgi_common.py,sha256=MO1mio-2giVjMIY_h4A4WLec8Fk0_FM0OWRQs6PlkuU,3081
40
40
  sentry_sdk/integrations/_wsgi_common.py,sha256=2h3cPID7WU2c9MOz2ccPwx0S2UEKeZZh7UBub28yZhE,6448
41
41
  sentry_sdk/integrations/aiohttp.py,sha256=Bc4tRJHBy8VVuvp1UCrHU_wFLJmpdH0k25sQRwuJKKE,13987
42
- sentry_sdk/integrations/anthropic.py,sha256=BVkjCKO7-TntGue2TJGNnfQ-SwHIqrnwehQz90FdbaA,9491
42
+ sentry_sdk/integrations/anthropic.py,sha256=B3mjyPuJLI-MBDJ43aYpB14jzpkNdeqjFi0XV7qcxfY,11530
43
43
  sentry_sdk/integrations/argv.py,sha256=QlNw7gOcRttPY-bu6gh1SPo-GZtD60HHRzZ201c1Gmk,906
44
44
  sentry_sdk/integrations/ariadne.py,sha256=JqtxiXTL6JZPl2eO_cffARADPN4x5fS76Li5k4DV0lA,5766
45
45
  sentry_sdk/integrations/arq.py,sha256=iwLsHiQnl3T7POXUZjkFIPxqrvhu5AFMpno_YEo99KM,8002
46
- sentry_sdk/integrations/asgi.py,sha256=H7peBFu0OaRgloR3IfyixnBuDL_HunCM_flubt4KKGI,13734
47
- sentry_sdk/integrations/asyncio.py,sha256=remZZbhGVt8tKjaCDSinrRvR895AOTOIDIeWsfxk2dA,4039
46
+ sentry_sdk/integrations/asgi.py,sha256=1C9ZTG0JBQq1DIg0UnrzxsjZBorA3JC0xjrA7xjLKUM,13762
47
+ sentry_sdk/integrations/asyncio.py,sha256=bHMXRGYBhHtoDADOeo77DBsQ9jK-D76npLo0AYVJ354,5712
48
48
  sentry_sdk/integrations/asyncpg.py,sha256=BVIiwjaut7OPoTIms71fPfCcuVmWNxg3xkfQlgiH-Dg,6715
49
49
  sentry_sdk/integrations/atexit.py,sha256=fS2Lq8b3yZKMSVHi0tk6rkfvsO9s5yYja2vEfQLyK1E,1600
50
50
  sentry_sdk/integrations/aws_lambda.py,sha256=Gsug-Aj4FI9qEumvJbZ0kwE6P8GmoR9oHfqncrV4pb8,17912
@@ -52,7 +52,7 @@ sentry_sdk/integrations/beam.py,sha256=J-QI9EFC9oAH3T53iVu7P1jNasU8fXo3_qSqYNvgT
52
52
  sentry_sdk/integrations/boto3.py,sha256=EE624btdiWAFKknVx3Kr1G1m31t3LaKHPHgTLEaXFJg,4902
53
53
  sentry_sdk/integrations/bottle.py,sha256=c6t5vpcuM1mQ1VwtDJev0XBno1WA05XPYcsLZdOwURQ,6368
54
54
  sentry_sdk/integrations/chalice.py,sha256=p3su2fdeJ2Q3-oGoS2NE8dQ6HpPfpdBOsU9dEykJ3M4,4667
55
- sentry_sdk/integrations/clickhouse_driver.py,sha256=SV1qVCgmBOgYmWjM7zjtZhob_LY3BVcVB8eK-xxS58k,6028
55
+ sentry_sdk/integrations/clickhouse_driver.py,sha256=MNvuJeLBH4udBHNJN2khGuVmFakxBjQ6KNcWAS-hQp8,6954
56
56
  sentry_sdk/integrations/cloud_resource_context.py,sha256=ATrQpn2ZASgd4DWjibEZKKI2ktkxz4aFbqy4IOEVJr8,7667
57
57
  sentry_sdk/integrations/cohere.py,sha256=cwax1pOzaOxcIhulZKpWJLPpRa7JhNEbqtViTnbPu3c,9284
58
58
  sentry_sdk/integrations/dedupe.py,sha256=zIcWT4-HIBOdHr-Hjb1LfDND8_CNdt75a5xGZnYVuDs,1375
@@ -60,18 +60,18 @@ sentry_sdk/integrations/dramatiq.py,sha256=D2o_2gtejh4_GOSatJslhHnG00CY7hMVeUNFc
60
60
  sentry_sdk/integrations/excepthook.py,sha256=91R2NQa1whur-csRA0mcOJTFpmRhx4DgruQ64HvoVmA,2399
61
61
  sentry_sdk/integrations/executing.py,sha256=NY0hh5V_JGEAaRJnQGBzAqMUeW5N6qu7qRJYDoUl3Gk,1989
62
62
  sentry_sdk/integrations/falcon.py,sha256=CfavMfULBlt074klwB4pPdNbxyILs3aoozMM2z7IXTA,8362
63
- sentry_sdk/integrations/fastapi.py,sha256=21Qd-tRGJts1AAtb64NpSy060ErPpixGWqjyR1V3LN0,4611
63
+ sentry_sdk/integrations/fastapi.py,sha256=1hyKEDCGjO8KIqZjHfN0zanN8rwO0ZeyqZxrcWux2yE,4482
64
64
  sentry_sdk/integrations/flask.py,sha256=0HpWBJgtFETgsJLPd8CB1oSlOvuhO4qw-2bbJ5SqMp4,8495
65
65
  sentry_sdk/integrations/gcp.py,sha256=qTgCT1Pih0vJs8IplgdY7ZRBZHcwQmCQtmbU8hTqj7A,8683
66
- sentry_sdk/integrations/gnu_backtrace.py,sha256=-3-9Q10HiZAo9V-mz7HDwLJgsfTTUgpklOI33DXjcY4,2640
66
+ sentry_sdk/integrations/gnu_backtrace.py,sha256=Y5PSaaipkh768G5D2h96q7sL4LGYhxafo_G7e2xRydw,2794
67
67
  sentry_sdk/integrations/gql.py,sha256=URXmOxpct_Ign2gm_CeFZ0hsnLWXfz44PiMsqWjSJhs,4113
68
68
  sentry_sdk/integrations/graphene.py,sha256=rMnEJePLX-xUNRuhN-RspCM3bvL3i9MjeYYZ1ztQhzA,4880
69
69
  sentry_sdk/integrations/httpx.py,sha256=mmRwid7YjTcMfQeU7agD-Y0J7WephIILSjJGfPNIgI0,6837
70
70
  sentry_sdk/integrations/huey.py,sha256=MxrFIEVSBFZx8jIhDXjCnaPWzXilswoDLBXMXkf4RWs,5462
71
71
  sentry_sdk/integrations/huggingface_hub.py,sha256=BwzdOrC8-wvtO6HCZ2Ueualyth5jqcxk6dQB-3mumoE,6647
72
- sentry_sdk/integrations/langchain.py,sha256=kk3bp0nO5I-LH4IPkKLlv9L0Jq0ds8MNa3IXjBhwmb0,19497
72
+ sentry_sdk/integrations/langchain.py,sha256=_jqysu3Xc78DNvu96ipxwxK-oXy1x7M9jPHWWrbNie0,26337
73
73
  sentry_sdk/integrations/launchdarkly.py,sha256=r2YvHBPwy7loZoHN-BmC5f5-bIkd-0g4DPwIwEzaYNI,1936
74
- sentry_sdk/integrations/litestar.py,sha256=_3huh3PLzrYF-bYGKzUA6Ux5VBtMey-9vPWO2RUBj3U,11785
74
+ sentry_sdk/integrations/litestar.py,sha256=6kZUoOUy5ZuGRTM3xrt6B2xR5DmILu9d4HWAk8XFxvI,11709
75
75
  sentry_sdk/integrations/logging.py,sha256=dYi5bSpucv_3nYtQ5FMcK9B5CdjtsNbqGgg4wwsIdiI,13477
76
76
  sentry_sdk/integrations/loguru.py,sha256=fqaTo6XqbMrg_GVy6lkPd7clS1guXBTz8B24VM-o4sw,6105
77
77
  sentry_sdk/integrations/modules.py,sha256=d-srhrbekzrbRA66kRuSoG8ZLPe_ATGj7scnZOxtGHs,815
@@ -80,7 +80,7 @@ sentry_sdk/integrations/openfeature.py,sha256=Hjp0sX23YuS-7F04Tt1FE06cVphzEMABn4
80
80
  sentry_sdk/integrations/pure_eval.py,sha256=mOA2Y-yk6EQEnKc5BWdduV4FLosvGpk4Mxrnl7iiRK4,4525
81
81
  sentry_sdk/integrations/pymongo.py,sha256=6QESkEspzdtLO3bOwRoTk58IeKhRlAmt_D9ubwgduxI,6085
82
82
  sentry_sdk/integrations/pyramid.py,sha256=pRKxzyIJT4nUgrhhAyR-IeTkfgl36e9i8a2bo576NFM,7178
83
- sentry_sdk/integrations/quart.py,sha256=lql_su_tvgp9QsgGAyckkuuvvoBXAVPIXcyX8vk5MEo,7259
83
+ sentry_sdk/integrations/quart.py,sha256=k3YoyrEA0Dlcv_pPEYyGgMOnRjJIShwyS0-xuScBlpM,7235
84
84
  sentry_sdk/integrations/ray.py,sha256=WSyuggzfYD5AnISB7psi_QFr-oX_w0YjQ9i_nvJaC2A,4958
85
85
  sentry_sdk/integrations/rq.py,sha256=3aHU2LlVm97I_4JZ7hepsVOXRB2DmeMe_jDcot84EFc,6576
86
86
  sentry_sdk/integrations/rust_tracing.py,sha256=p1NRiCcXIQsOvnofzJeYx8Y-3UFR4Yw3BGQgLyeRxAc,8631
@@ -88,8 +88,8 @@ sentry_sdk/integrations/sanic.py,sha256=C6ctMCPIYib-meNC-tWUitIVSg4PaQ3-hV62I-em
88
88
  sentry_sdk/integrations/serverless.py,sha256=aY3ZZjlF3Sl0uKDfIEvAxfFYIOppV9nKArH2BAlbU0A,1860
89
89
  sentry_sdk/integrations/socket.py,sha256=B0SYwJFCo_3UbG9l5YhIa_E8GBWsJYg8ddxRBajwU9I,3454
90
90
  sentry_sdk/integrations/sqlalchemy.py,sha256=JSc45HmsKPWZlRu9y8ctA3pAjcTBIOjCi6tDn4G1oKA,4339
91
- sentry_sdk/integrations/starlette.py,sha256=EMukyRLrUFQhtYlOiB446qk_PynOqOy6ZGeiWDUy4bw,25244
92
- sentry_sdk/integrations/starlite.py,sha256=HE08ZcvXUIE_u642cZtY3dRaMvUYqlMURUTcoySENv8,10521
91
+ sentry_sdk/integrations/starlette.py,sha256=CeorO0izWPR2yDBFzmATTgpJp74hHE9RS2h2DPBb-j8,25098
92
+ sentry_sdk/integrations/starlite.py,sha256=7Ilp0-syZ1dfXFnv17xumefRqaPVVU4hvzYSApUMG0c,10461
93
93
  sentry_sdk/integrations/statsig.py,sha256=3Abtq8S5EqHUYVaMf61_MiIx5oZfLz09d61Cz97_TSY,1241
94
94
  sentry_sdk/integrations/stdlib.py,sha256=HNc2haRxGZHU9ObFvknBdYGhoAeylIG_XfYY1lMUDPM,10345
95
95
  sentry_sdk/integrations/strawberry.py,sha256=fwolVXMtauXXzqzcYtKw34tixsw-I_KlBPWZIU0lmLs,13506
@@ -122,9 +122,9 @@ sentry_sdk/integrations/openai_agents/__init__.py,sha256=N5TnKB90s7cHpM-M5Sf6ZJK
122
122
  sentry_sdk/integrations/openai_agents/consts.py,sha256=PTb3vlqkuMPktu21ALK72o5WMIX4-cewTEiTRdHKFdQ,38
123
123
  sentry_sdk/integrations/openai_agents/utils.py,sha256=yXM4X-PSvPv_Ab94aXAY7dwHqAcEpuB0Rw0tCrt8bDY,5198
124
124
  sentry_sdk/integrations/openai_agents/patches/__init__.py,sha256=I7C9JZ70Mf8PV3wPdFsxTqvcYl4TYUgSZYfNU2Spb7Y,231
125
- sentry_sdk/integrations/openai_agents/patches/agent_run.py,sha256=bGxx3zcuLPqYD24lpRfT0YeinkForzw21Ppt5UaRBvM,5913
125
+ sentry_sdk/integrations/openai_agents/patches/agent_run.py,sha256=YDW2UtZotY9xkJHfKqQPXo55JIQrymNUMDfyIcoz6J8,5911
126
126
  sentry_sdk/integrations/openai_agents/patches/models.py,sha256=3WTGaXaSCrlKk36VgbojQRY7asycSUl2kvvcroHF3gU,1407
127
- sentry_sdk/integrations/openai_agents/patches/runner.py,sha256=DYdx0SXI6bGZe3lJrkQrjPBkbkbI4uaLQPcmKj5DG1g,1235
127
+ sentry_sdk/integrations/openai_agents/patches/runner.py,sha256=j_KPHnM_hUUXM6GHji977eTy5pw7APd5rPA7d9OlrGk,1486
128
128
  sentry_sdk/integrations/openai_agents/patches/tools.py,sha256=_td7_F_QTy1GeFwzyHkg87s_D2_vQlrmpF3Z2ai4-iE,3309
129
129
  sentry_sdk/integrations/openai_agents/spans/__init__.py,sha256=RlVi781zGsvCJBciDO_EbBbwkakwbP9DoFQBbo4VAEE,353
130
130
  sentry_sdk/integrations/openai_agents/spans/agent_workflow.py,sha256=-l--igXl-J_2EKygzJ-R3-Jb0Cx91sm0aH4QrTbw3M8,431
@@ -160,9 +160,9 @@ sentry_sdk/profiler/__init__.py,sha256=bYeDkmLQliS2KkNSOGa8Sx4zN3pjTc3WmYIvbkcGk
160
160
  sentry_sdk/profiler/continuous_profiler.py,sha256=AXwhI-NI6hx82EnKEy_oNQPPl9nwLQJKcj_QRX6KKAg,21574
161
161
  sentry_sdk/profiler/transaction_profiler.py,sha256=gbe9RedrGqPakPi3uY9fUDXp0IcM9djHuVcYUcbDRfg,25381
162
162
  sentry_sdk/profiler/utils.py,sha256=cdjpSQ9IAchtMPLWNFGDjZHIXArTbcPtFPEngB9Tb9c,6475
163
- sentry_sdk-3.0.0a5.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
164
- sentry_sdk-3.0.0a5.dist-info/METADATA,sha256=W5PgWwtJXxOaRFw_G6kh1mbZ7cZp96mYiZoQ0TJbV6A,10151
165
- sentry_sdk-3.0.0a5.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
166
- sentry_sdk-3.0.0a5.dist-info/entry_points.txt,sha256=-FP10-IbDq7-9RSn7JcaVV6-nDwVN2kwvA46zNTNwtk,78
167
- sentry_sdk-3.0.0a5.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
168
- sentry_sdk-3.0.0a5.dist-info/RECORD,,
163
+ sentry_sdk-3.0.0a6.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
164
+ sentry_sdk-3.0.0a6.dist-info/METADATA,sha256=vy2Okj-SATP_HFIcncvnODT2XP7hQFQG1HnoTJMCXjw,10233
165
+ sentry_sdk-3.0.0a6.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
166
+ sentry_sdk-3.0.0a6.dist-info/entry_points.txt,sha256=-FP10-IbDq7-9RSn7JcaVV6-nDwVN2kwvA46zNTNwtk,78
167
+ sentry_sdk-3.0.0a6.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
168
+ sentry_sdk-3.0.0a6.dist-info/RECORD,,