sentry-sdk 2.37.1__tar.gz → 2.39.0__tar.gz

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.

Files changed (205) hide show
  1. {sentry_sdk-2.37.1/sentry_sdk.egg-info → sentry_sdk-2.39.0}/PKG-INFO +1 -1
  2. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/__init__.py +4 -2
  3. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_types.py +1 -1
  4. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/ai/utils.py +11 -1
  5. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/consts.py +5 -2
  6. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/envelope.py +1 -1
  7. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/__init__.py +2 -1
  8. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/anthropic.py +65 -15
  9. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/asyncio.py +2 -0
  10. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/cohere.py +4 -0
  11. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/dedupe.py +19 -3
  12. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/gql.py +22 -5
  13. sentry_sdk-2.39.0/sentry_sdk/integrations/huggingface_hub.py +378 -0
  14. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/langchain.py +17 -14
  15. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai.py +13 -8
  16. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/agent_run.py +4 -4
  17. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +2 -2
  18. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/execute_tool.py +1 -1
  19. sentry_sdk-2.39.0/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +78 -0
  20. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/utils.py +3 -10
  21. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/threading.py +1 -1
  22. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/continuous_profiler.py +13 -3
  23. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/serializer.py +12 -1
  24. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/tracing.py +3 -3
  25. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/tracing_utils.py +32 -23
  26. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/utils.py +6 -0
  27. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0/sentry_sdk.egg-info}/PKG-INFO +1 -1
  28. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/setup.py +1 -1
  29. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_dsc.py +1 -1
  30. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_envelope.py +22 -1
  31. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_monitor.py +1 -1
  32. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_propagationcontext.py +10 -7
  33. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_transport.py +38 -1
  34. sentry_sdk-2.37.1/sentry_sdk/integrations/huggingface_hub.py +0 -181
  35. sentry_sdk-2.37.1/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +0 -34
  36. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/LICENSE +0 -0
  37. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/MANIFEST.in +0 -0
  38. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/README.md +0 -0
  39. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/pyproject.toml +0 -0
  40. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_compat.py +0 -0
  41. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_init_implementation.py +0 -0
  42. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_log_batcher.py +0 -0
  43. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_lru_cache.py +0 -0
  44. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_queue.py +0 -0
  45. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_werkzeug.py +0 -0
  46. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/ai/__init__.py +0 -0
  47. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/ai/monitoring.py +0 -0
  48. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/api.py +0 -0
  49. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/attachments.py +0 -0
  50. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/client.py +0 -0
  51. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/__init__.py +0 -0
  52. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/api.py +0 -0
  53. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/consts.py +0 -0
  54. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/decorator.py +0 -0
  55. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/debug.py +0 -0
  56. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/feature_flags.py +0 -0
  57. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/hub.py +0 -0
  58. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/_asgi_common.py +0 -0
  59. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/_wsgi_common.py +0 -0
  60. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/aiohttp.py +0 -0
  61. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/argv.py +0 -0
  62. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/ariadne.py +0 -0
  63. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/arq.py +0 -0
  64. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/asgi.py +0 -0
  65. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/asyncpg.py +0 -0
  66. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/atexit.py +0 -0
  67. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/aws_lambda.py +0 -0
  68. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/beam.py +0 -0
  69. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/boto3.py +0 -0
  70. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/bottle.py +0 -0
  71. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/celery/__init__.py +0 -0
  72. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/celery/beat.py +0 -0
  73. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/celery/utils.py +0 -0
  74. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/chalice.py +0 -0
  75. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/clickhouse_driver.py +0 -0
  76. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
  77. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/__init__.py +0 -0
  78. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/asgi.py +0 -0
  79. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/caching.py +0 -0
  80. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/middleware.py +0 -0
  81. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/signals_handlers.py +0 -0
  82. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/templates.py +0 -0
  83. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/transactions.py +0 -0
  84. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/views.py +0 -0
  85. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/dramatiq.py +0 -0
  86. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/excepthook.py +0 -0
  87. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/executing.py +0 -0
  88. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/falcon.py +0 -0
  89. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/fastapi.py +0 -0
  90. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/flask.py +0 -0
  91. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/gcp.py +0 -0
  92. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
  93. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/graphene.py +0 -0
  94. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/__init__.py +0 -0
  95. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
  96. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/aio/client.py +0 -0
  97. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/aio/server.py +0 -0
  98. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/client.py +0 -0
  99. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/consts.py +0 -0
  100. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/server.py +0 -0
  101. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/httpx.py +0 -0
  102. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/huey.py +0 -0
  103. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/langgraph.py +0 -0
  104. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/launchdarkly.py +0 -0
  105. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/litestar.py +0 -0
  106. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/logging.py +0 -0
  107. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/loguru.py +0 -0
  108. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/modules.py +0 -0
  109. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/__init__.py +0 -0
  110. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/consts.py +0 -0
  111. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/__init__.py +0 -0
  112. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/models.py +0 -0
  113. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/runner.py +0 -0
  114. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/tools.py +0 -0
  115. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/__init__.py +0 -0
  116. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/ai_client.py +0 -0
  117. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/handoff.py +0 -0
  118. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openfeature.py +0 -0
  119. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/__init__.py +0 -0
  120. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/consts.py +0 -0
  121. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/integration.py +0 -0
  122. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/propagator.py +0 -0
  123. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -0
  124. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/pure_eval.py +0 -0
  125. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/pymongo.py +0 -0
  126. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/pyramid.py +0 -0
  127. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/quart.py +0 -0
  128. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/ray.py +0 -0
  129. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/__init__.py +0 -0
  130. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/_async_common.py +0 -0
  131. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/_sync_common.py +0 -0
  132. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/consts.py +0 -0
  133. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
  134. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/modules/caches.py +0 -0
  135. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/modules/queries.py +0 -0
  136. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/rb.py +0 -0
  137. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/redis.py +0 -0
  138. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/redis_cluster.py +0 -0
  139. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +0 -0
  140. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/utils.py +0 -0
  141. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/rq.py +0 -0
  142. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/rust_tracing.py +0 -0
  143. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/sanic.py +0 -0
  144. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/serverless.py +0 -0
  145. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/socket.py +0 -0
  146. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/spark/__init__.py +0 -0
  147. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
  148. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
  149. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/sqlalchemy.py +0 -0
  150. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/starlette.py +0 -0
  151. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/starlite.py +0 -0
  152. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/statsig.py +0 -0
  153. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/stdlib.py +0 -0
  154. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/strawberry.py +0 -0
  155. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/sys_exit.py +0 -0
  156. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/tornado.py +0 -0
  157. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/trytond.py +0 -0
  158. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/typer.py +0 -0
  159. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/unleash.py +0 -0
  160. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/unraisablehook.py +0 -0
  161. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/wsgi.py +0 -0
  162. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/logger.py +0 -0
  163. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/metrics.py +0 -0
  164. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/monitor.py +0 -0
  165. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/__init__.py +0 -0
  166. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/transaction_profiler.py +0 -0
  167. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/utils.py +0 -0
  168. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/py.typed +0 -0
  169. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/scope.py +0 -0
  170. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/scrubber.py +0 -0
  171. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/session.py +0 -0
  172. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/sessions.py +0 -0
  173. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/spotlight.py +0 -0
  174. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/transport.py +0 -0
  175. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/types.py +0 -0
  176. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/worker.py +0 -0
  177. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/SOURCES.txt +0 -0
  178. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/dependency_links.txt +0 -0
  179. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/entry_points.txt +0 -0
  180. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/not-zip-safe +0 -0
  181. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/requires.txt +0 -0
  182. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/top_level.txt +0 -0
  183. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/setup.cfg +0 -0
  184. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_ai_monitoring.py +0 -0
  185. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_api.py +0 -0
  186. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_basics.py +0 -0
  187. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_client.py +0 -0
  188. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_conftest.py +0 -0
  189. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_crons.py +0 -0
  190. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_exceptiongroup.py +0 -0
  191. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_feature_flags.py +0 -0
  192. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_full_stack_frames.py +0 -0
  193. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_gevent.py +0 -0
  194. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_import.py +0 -0
  195. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_logs.py +0 -0
  196. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_lru_cache.py +0 -0
  197. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_metrics.py +0 -0
  198. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_scope.py +0 -0
  199. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_scrubber.py +0 -0
  200. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_serializer.py +0 -0
  201. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_sessions.py +0 -0
  202. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_spotlight.py +0 -0
  203. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_tracing_utils.py +0 -0
  204. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_types.py +0 -0
  205. {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.37.1
3
+ Version: 2.39.0
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
@@ -1,10 +1,10 @@
1
+ from sentry_sdk import profiler
1
2
  from sentry_sdk.scope import Scope
2
3
  from sentry_sdk.transport import Transport, HttpTransport
3
4
  from sentry_sdk.client import Client
4
5
 
5
6
  from sentry_sdk.api import * # noqa
6
-
7
- from sentry_sdk.consts import VERSION # noqa
7
+ from sentry_sdk.consts import VERSION
8
8
 
9
9
  __all__ = [ # noqa
10
10
  "Hub",
@@ -12,6 +12,7 @@ __all__ = [ # noqa
12
12
  "Client",
13
13
  "Transport",
14
14
  "HttpTransport",
15
+ "VERSION",
15
16
  "integrations",
16
17
  # From sentry_sdk.api
17
18
  "init",
@@ -47,6 +48,7 @@ __all__ = [ # noqa
47
48
  "trace",
48
49
  "monitor",
49
50
  "logger",
51
+ "profiler",
50
52
  "start_session",
51
53
  "end_session",
52
54
  "set_transaction_name",
@@ -269,7 +269,7 @@ if TYPE_CHECKING:
269
269
  "metric_bucket",
270
270
  "monitor",
271
271
  "span",
272
- "log",
272
+ "log_item",
273
273
  ]
274
274
  SessionStatus = Literal["ok", "exited", "crashed", "abnormal"]
275
275
 
@@ -3,9 +3,10 @@ import json
3
3
  from typing import TYPE_CHECKING
4
4
 
5
5
  if TYPE_CHECKING:
6
- from typing import Any
6
+ from typing import Any, Callable
7
7
  from sentry_sdk.tracing import Span
8
8
 
9
+ import sentry_sdk
9
10
  from sentry_sdk.utils import logger
10
11
 
11
12
 
@@ -37,3 +38,12 @@ def set_data_normalized(span, key, value, unpack=True):
37
38
  span.set_data(key, normalized)
38
39
  else:
39
40
  span.set_data(key, json.dumps(normalized))
41
+
42
+
43
+ def get_start_span_function():
44
+ # type: () -> Callable[..., Any]
45
+ current_span = sentry_sdk.get_current_span()
46
+ transaction_exists = (
47
+ current_span is not None and current_span.containing_transaction is not None
48
+ )
49
+ return sentry_sdk.start_span if transaction_exists else sentry_sdk.start_transaction
@@ -765,11 +765,12 @@ class SPANSTATUS:
765
765
  CANCELLED = "cancelled"
766
766
  DATA_LOSS = "data_loss"
767
767
  DEADLINE_EXCEEDED = "deadline_exceeded"
768
+ ERROR = "error" # OTel status code: https://opentelemetry.io/docs/concepts/signals/traces/#span-status
768
769
  FAILED_PRECONDITION = "failed_precondition"
769
770
  INTERNAL_ERROR = "internal_error"
770
771
  INVALID_ARGUMENT = "invalid_argument"
771
772
  NOT_FOUND = "not_found"
772
- OK = "ok"
773
+ OK = "ok" # HTTP 200 and OTel status code: https://opentelemetry.io/docs/concepts/signals/traces/#span-status
773
774
  OUT_OF_RANGE = "out_of_range"
774
775
  PERMISSION_DENIED = "permission_denied"
775
776
  RESOURCE_EXHAUSTED = "resource_exhausted"
@@ -777,6 +778,7 @@ class SPANSTATUS:
777
778
  UNAVAILABLE = "unavailable"
778
779
  UNIMPLEMENTED = "unimplemented"
779
780
  UNKNOWN_ERROR = "unknown_error"
781
+ UNSET = "unset" # OTel status code: https://opentelemetry.io/docs/concepts/signals/traces/#span-status
780
782
 
781
783
 
782
784
  class OP:
@@ -795,6 +797,7 @@ class OP:
795
797
  GEN_AI_CREATE_AGENT = "gen_ai.create_agent"
796
798
  GEN_AI_EMBEDDINGS = "gen_ai.embeddings"
797
799
  GEN_AI_EXECUTE_TOOL = "gen_ai.execute_tool"
800
+ GEN_AI_GENERATE_TEXT = "gen_ai.generate_text"
798
801
  GEN_AI_HANDOFF = "gen_ai.handoff"
799
802
  GEN_AI_PIPELINE = "gen_ai.pipeline"
800
803
  GEN_AI_INVOKE_AGENT = "gen_ai.invoke_agent"
@@ -1330,4 +1333,4 @@ DEFAULT_OPTIONS = _get_default_options()
1330
1333
  del _get_default_options
1331
1334
 
1332
1335
 
1333
- VERSION = "2.37.1"
1336
+ VERSION = "2.39.0"
@@ -273,7 +273,7 @@ class Item:
273
273
  elif ty == "event":
274
274
  return "error"
275
275
  elif ty == "log":
276
- return "log"
276
+ return "log_item"
277
277
  elif ty == "client_report":
278
278
  return "internal"
279
279
  elif ty == "profile":
@@ -141,7 +141,8 @@ _MIN_VERSIONS = {
141
141
  "gql": (3, 4, 1),
142
142
  "graphene": (3, 3),
143
143
  "grpc": (1, 32, 0), # grpcio
144
- "huggingface_hub": (0, 22),
144
+ "httpx": (0, 16, 0),
145
+ "huggingface_hub": (0, 24, 7),
145
146
  "langchain": (0, 1, 0),
146
147
  "langgraph": (0, 6, 6),
147
148
  "launchdarkly": (9, 8, 0),
@@ -1,13 +1,13 @@
1
1
  from functools import wraps
2
- import json
3
2
  from typing import TYPE_CHECKING
4
3
 
5
4
  import sentry_sdk
6
5
  from sentry_sdk.ai.monitoring import record_token_usage
7
- from sentry_sdk.ai.utils import set_data_normalized
8
- from sentry_sdk.consts import OP, SPANDATA
6
+ from sentry_sdk.ai.utils import set_data_normalized, get_start_span_function
7
+ from sentry_sdk.consts import OP, SPANDATA, SPANSTATUS
9
8
  from sentry_sdk.integrations import _check_minimum_version, DidNotEnable, Integration
10
9
  from sentry_sdk.scope import should_send_default_pii
10
+ from sentry_sdk.tracing_utils import set_span_errored
11
11
  from sentry_sdk.utils import (
12
12
  capture_internal_exceptions,
13
13
  event_from_exception,
@@ -53,6 +53,8 @@ class AnthropicIntegration(Integration):
53
53
 
54
54
  def _capture_exception(exc):
55
55
  # type: (Any) -> None
56
+ set_span_errored()
57
+
56
58
  event, hint = event_from_exception(
57
59
  exc,
58
60
  client_options=sentry_sdk.get_client().options,
@@ -117,8 +119,29 @@ def _set_input_data(span, kwargs, integration):
117
119
  and should_send_default_pii()
118
120
  and integration.include_prompts
119
121
  ):
122
+ normalized_messages = []
123
+ for message in messages:
124
+ if (
125
+ message.get("role") == "user"
126
+ and "content" in message
127
+ and isinstance(message["content"], (list, tuple))
128
+ ):
129
+ for item in message["content"]:
130
+ if item.get("type") == "tool_result":
131
+ normalized_messages.append(
132
+ {
133
+ "role": "tool",
134
+ "content": {
135
+ "tool_use_id": item.get("tool_use_id"),
136
+ "output": item.get("content"),
137
+ },
138
+ }
139
+ )
140
+ else:
141
+ normalized_messages.append(message)
142
+
120
143
  set_data_normalized(
121
- span, SPANDATA.GEN_AI_REQUEST_MESSAGES, safe_serialize(messages)
144
+ span, SPANDATA.GEN_AI_REQUEST_MESSAGES, normalized_messages, unpack=False
122
145
  )
123
146
 
124
147
  set_data_normalized(
@@ -159,12 +182,29 @@ def _set_output_data(
159
182
  Set output data for the span based on the AI response."""
160
183
  span.set_data(SPANDATA.GEN_AI_RESPONSE_MODEL, model)
161
184
  if should_send_default_pii() and integration.include_prompts:
162
- set_data_normalized(
163
- span,
164
- SPANDATA.GEN_AI_RESPONSE_TEXT,
165
- json.dumps(content_blocks),
166
- unpack=False,
167
- )
185
+ output_messages = {
186
+ "response": [],
187
+ "tool": [],
188
+ } # type: (dict[str, list[Any]])
189
+
190
+ for output in content_blocks:
191
+ if output["type"] == "text":
192
+ output_messages["response"].append(output["text"])
193
+ elif output["type"] == "tool_use":
194
+ output_messages["tool"].append(output)
195
+
196
+ if len(output_messages["tool"]) > 0:
197
+ set_data_normalized(
198
+ span,
199
+ SPANDATA.GEN_AI_RESPONSE_TOOL_CALLS,
200
+ output_messages["tool"],
201
+ unpack=False,
202
+ )
203
+
204
+ if len(output_messages["response"]) > 0:
205
+ set_data_normalized(
206
+ span, SPANDATA.GEN_AI_RESPONSE_TEXT, output_messages["response"]
207
+ )
168
208
 
169
209
  record_token_usage(
170
210
  span,
@@ -172,8 +212,6 @@ def _set_output_data(
172
212
  output_tokens=output_tokens,
173
213
  )
174
214
 
175
- # TODO: GEN_AI_RESPONSE_TOOL_CALLS ?
176
-
177
215
  if finish_span:
178
216
  span.__exit__(None, None, None)
179
217
 
@@ -194,7 +232,7 @@ def _sentry_patched_create_common(f, *args, **kwargs):
194
232
 
195
233
  model = kwargs.get("model", "")
196
234
 
197
- span = sentry_sdk.start_span(
235
+ span = get_start_span_function()(
198
236
  op=OP.GEN_AI_CHAT,
199
237
  name=f"chat {model}".strip(),
200
238
  origin=AnthropicIntegration.origin,
@@ -322,7 +360,13 @@ def _wrap_message_create(f):
322
360
  integration = sentry_sdk.get_client().get_integration(AnthropicIntegration)
323
361
  kwargs["integration"] = integration
324
362
 
325
- return _execute_sync(f, *args, **kwargs)
363
+ try:
364
+ return _execute_sync(f, *args, **kwargs)
365
+ finally:
366
+ span = sentry_sdk.get_current_span()
367
+ if span is not None and span.status == SPANSTATUS.ERROR:
368
+ with capture_internal_exceptions():
369
+ span.__exit__(None, None, None)
326
370
 
327
371
  return _sentry_patched_create_sync
328
372
 
@@ -355,6 +399,12 @@ def _wrap_message_create_async(f):
355
399
  integration = sentry_sdk.get_client().get_integration(AnthropicIntegration)
356
400
  kwargs["integration"] = integration
357
401
 
358
- return await _execute_async(f, *args, **kwargs)
402
+ try:
403
+ return await _execute_async(f, *args, **kwargs)
404
+ finally:
405
+ span = sentry_sdk.get_current_span()
406
+ if span is not None and span.status == SPANSTATUS.ERROR:
407
+ with capture_internal_exceptions():
408
+ span.__exit__(None, None, None)
359
409
 
360
410
  return _sentry_patched_create_async
@@ -51,6 +51,8 @@ def patch_asyncio():
51
51
  ):
52
52
  try:
53
53
  result = await coro
54
+ except StopAsyncIteration as e:
55
+ raise e from None
54
56
  except Exception:
55
57
  reraise(*_capture_exception())
56
58
 
@@ -7,6 +7,8 @@ from sentry_sdk.ai.utils import set_data_normalized
7
7
 
8
8
  from typing import TYPE_CHECKING
9
9
 
10
+ from sentry_sdk.tracing_utils import set_span_errored
11
+
10
12
  if TYPE_CHECKING:
11
13
  from typing import Any, Callable, Iterator
12
14
  from sentry_sdk.tracing import Span
@@ -84,6 +86,8 @@ class CohereIntegration(Integration):
84
86
 
85
87
  def _capture_exception(exc):
86
88
  # type: (Any) -> None
89
+ set_span_errored()
90
+
87
91
  event, hint = event_from_exception(
88
92
  exc,
89
93
  client_options=sentry_sdk.get_client().options,
@@ -1,5 +1,7 @@
1
+ import weakref
2
+
1
3
  import sentry_sdk
2
- from sentry_sdk.utils import ContextVar
4
+ from sentry_sdk.utils import ContextVar, logger
3
5
  from sentry_sdk.integrations import Integration
4
6
  from sentry_sdk.scope import add_global_event_processor
5
7
 
@@ -35,10 +37,24 @@ class DedupeIntegration(Integration):
35
37
  if exc_info is None:
36
38
  return event
37
39
 
40
+ last_seen = integration._last_seen.get(None)
41
+ if last_seen is not None:
42
+ # last_seen is either a weakref or the original instance
43
+ last_seen = (
44
+ last_seen() if isinstance(last_seen, weakref.ref) else last_seen
45
+ )
46
+
38
47
  exc = exc_info[1]
39
- if integration._last_seen.get(None) is exc:
48
+ if last_seen is exc:
49
+ logger.info("DedupeIntegration dropped duplicated error event %s", exc)
40
50
  return None
41
- integration._last_seen.set(exc)
51
+
52
+ # we can only weakref non builtin types
53
+ try:
54
+ integration._last_seen.set(weakref.ref(exc))
55
+ except TypeError:
56
+ integration._last_seen.set(exc)
57
+
42
58
  return event
43
59
 
44
60
  @staticmethod
@@ -18,6 +18,13 @@ try:
18
18
  )
19
19
  from gql.transport import Transport, AsyncTransport # type: ignore[import-not-found]
20
20
  from gql.transport.exceptions import TransportQueryError # type: ignore[import-not-found]
21
+
22
+ try:
23
+ # gql 4.0+
24
+ from gql import GraphQLRequest
25
+ except ImportError:
26
+ GraphQLRequest = None
27
+
21
28
  except ImportError:
22
29
  raise DidNotEnable("gql is not installed")
23
30
 
@@ -92,13 +99,13 @@ def _patch_execute():
92
99
  real_execute = gql.Client.execute
93
100
 
94
101
  @ensure_integration_enabled(GQLIntegration, real_execute)
95
- def sentry_patched_execute(self, document, *args, **kwargs):
102
+ def sentry_patched_execute(self, document_or_request, *args, **kwargs):
96
103
  # type: (gql.Client, DocumentNode, Any, Any) -> Any
97
104
  scope = sentry_sdk.get_isolation_scope()
98
- scope.add_event_processor(_make_gql_event_processor(self, document))
105
+ scope.add_event_processor(_make_gql_event_processor(self, document_or_request))
99
106
 
100
107
  try:
101
- return real_execute(self, document, *args, **kwargs)
108
+ return real_execute(self, document_or_request, *args, **kwargs)
102
109
  except TransportQueryError as e:
103
110
  event, hint = event_from_exception(
104
111
  e,
@@ -112,8 +119,8 @@ def _patch_execute():
112
119
  gql.Client.execute = sentry_patched_execute
113
120
 
114
121
 
115
- def _make_gql_event_processor(client, document):
116
- # type: (gql.Client, DocumentNode) -> EventProcessor
122
+ def _make_gql_event_processor(client, document_or_request):
123
+ # type: (gql.Client, Union[DocumentNode, gql.GraphQLRequest]) -> EventProcessor
117
124
  def processor(event, hint):
118
125
  # type: (Event, dict[str, Any]) -> Event
119
126
  try:
@@ -130,6 +137,16 @@ def _make_gql_event_processor(client, document):
130
137
  )
131
138
 
132
139
  if should_send_default_pii():
140
+ if GraphQLRequest is not None and isinstance(
141
+ document_or_request, GraphQLRequest
142
+ ):
143
+ # In v4.0.0, gql moved to using GraphQLRequest instead of
144
+ # DocumentNode in execute
145
+ # https://github.com/graphql-python/gql/pull/556
146
+ document = document_or_request.document
147
+ else:
148
+ document = document_or_request
149
+
133
150
  request["data"] = _data_from_document(document)
134
151
  contexts = event.setdefault("contexts", {})
135
152
  response = contexts.setdefault("response", {})