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/ai/utils.py +7 -8
- sentry_sdk/api.py +13 -2
- sentry_sdk/client.py +93 -17
- sentry_sdk/consts.py +14 -6
- sentry_sdk/crons/api.py +5 -0
- sentry_sdk/integrations/anthropic.py +133 -73
- sentry_sdk/integrations/asgi.py +10 -9
- sentry_sdk/integrations/asyncio.py +85 -20
- sentry_sdk/integrations/clickhouse_driver.py +55 -28
- sentry_sdk/integrations/fastapi.py +1 -7
- sentry_sdk/integrations/gnu_backtrace.py +6 -3
- sentry_sdk/integrations/langchain.py +462 -218
- sentry_sdk/integrations/litestar.py +1 -1
- sentry_sdk/integrations/openai_agents/patches/agent_run.py +0 -2
- sentry_sdk/integrations/openai_agents/patches/runner.py +18 -15
- sentry_sdk/integrations/quart.py +1 -1
- sentry_sdk/integrations/starlette.py +1 -5
- sentry_sdk/integrations/starlite.py +2 -2
- sentry_sdk/scope.py +11 -11
- sentry_sdk/tracing.py +94 -17
- sentry_sdk/tracing_utils.py +330 -33
- sentry_sdk/transport.py +357 -62
- sentry_sdk/utils.py +23 -5
- sentry_sdk/worker.py +197 -3
- {sentry_sdk-3.0.0a5.dist-info → sentry_sdk-3.0.0a6.dist-info}/METADATA +3 -1
- {sentry_sdk-3.0.0a5.dist-info → sentry_sdk-3.0.0a6.dist-info}/RECORD +30 -30
- {sentry_sdk-3.0.0a5.dist-info → sentry_sdk-3.0.0a6.dist-info}/WHEEL +0 -0
- {sentry_sdk-3.0.0a5.dist-info → sentry_sdk-3.0.0a6.dist-info}/entry_points.txt +0 -0
- {sentry_sdk-3.0.0a5.dist-info → sentry_sdk-3.0.0a6.dist-info}/licenses/LICENSE +0 -0
- {sentry_sdk-3.0.0a5.dist-info → sentry_sdk-3.0.0a6.dist-info}/top_level.txt +0 -0
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
|
|
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[[],
|
|
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.
|
|
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=
|
|
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=
|
|
12
|
-
sentry_sdk/consts.py,sha256=
|
|
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=
|
|
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=
|
|
26
|
-
sentry_sdk/tracing_utils.py,sha256=
|
|
27
|
-
sentry_sdk/transport.py,sha256=
|
|
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=
|
|
30
|
-
sentry_sdk/worker.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
47
|
-
sentry_sdk/integrations/asyncio.py,sha256=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
92
|
-
sentry_sdk/integrations/starlite.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
164
|
-
sentry_sdk-3.0.
|
|
165
|
-
sentry_sdk-3.0.
|
|
166
|
-
sentry_sdk-3.0.
|
|
167
|
-
sentry_sdk-3.0.
|
|
168
|
-
sentry_sdk-3.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|