sentry-sdk 2.27.0__tar.gz → 3.0.0a1__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 (199) hide show
  1. {sentry_sdk-2.27.0/sentry_sdk.egg-info → sentry_sdk-3.0.0a1}/PKG-INFO +3 -5
  2. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/__init__.py +4 -8
  3. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/_compat.py +0 -1
  4. sentry_sdk-3.0.0a1/sentry_sdk/_init_implementation.py +46 -0
  5. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/_log_batcher.py +47 -28
  6. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/_types.py +2 -64
  7. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/ai/monitoring.py +14 -10
  8. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/ai/utils.py +1 -1
  9. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/api.py +69 -163
  10. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/client.py +25 -72
  11. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/consts.py +42 -23
  12. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/debug.py +0 -10
  13. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/envelope.py +2 -10
  14. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/feature_flags.py +2 -2
  15. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/__init__.py +4 -2
  16. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/_asgi_common.py +3 -3
  17. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/_wsgi_common.py +11 -40
  18. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/aiohttp.py +104 -57
  19. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/anthropic.py +10 -7
  20. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/arq.py +24 -13
  21. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/asgi.py +102 -83
  22. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/asyncio.py +1 -0
  23. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/asyncpg.py +45 -30
  24. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/aws_lambda.py +109 -92
  25. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/boto3.py +38 -9
  26. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/bottle.py +1 -1
  27. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/celery/__init__.py +48 -38
  28. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/clickhouse_driver.py +59 -28
  29. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/cohere.py +2 -0
  30. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/__init__.py +25 -46
  31. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/asgi.py +6 -2
  32. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/caching.py +13 -22
  33. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/middleware.py +1 -0
  34. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/signals_handlers.py +3 -1
  35. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/templates.py +8 -12
  36. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/transactions.py +1 -6
  37. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/django/views.py +5 -2
  38. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/falcon.py +7 -25
  39. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/fastapi.py +3 -3
  40. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/flask.py +1 -1
  41. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/gcp.py +63 -38
  42. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/graphene.py +6 -13
  43. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/aio/client.py +14 -8
  44. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/aio/server.py +19 -21
  45. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/client.py +8 -6
  46. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/server.py +12 -14
  47. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/httpx.py +47 -12
  48. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/huey.py +26 -22
  49. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/huggingface_hub.py +1 -0
  50. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/langchain.py +22 -15
  51. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/litestar.py +4 -2
  52. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/logging.py +12 -3
  53. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/openai.py +2 -0
  54. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/pymongo.py +18 -25
  55. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/pyramid.py +1 -1
  56. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/quart.py +3 -3
  57. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/ray.py +23 -17
  58. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/_async_common.py +30 -18
  59. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/_sync_common.py +28 -18
  60. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/modules/caches.py +13 -10
  61. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/modules/queries.py +14 -11
  62. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/rb.py +4 -4
  63. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/redis.py +6 -6
  64. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/redis_cluster.py +18 -16
  65. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +4 -4
  66. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/utils.py +63 -19
  67. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/rq.py +68 -23
  68. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/rust_tracing.py +28 -43
  69. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/sanic.py +23 -13
  70. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/socket.py +9 -5
  71. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/sqlalchemy.py +8 -8
  72. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/starlette.py +11 -31
  73. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/starlite.py +4 -2
  74. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/stdlib.py +56 -9
  75. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/strawberry.py +40 -59
  76. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/threading.py +10 -26
  77. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/tornado.py +57 -18
  78. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/trytond.py +4 -1
  79. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/wsgi.py +84 -38
  80. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/__init__.py +9 -0
  81. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/consts.py +33 -0
  82. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/contextvars_context.py +73 -0
  83. {sentry_sdk-2.27.0/sentry_sdk/integrations → sentry_sdk-3.0.0a1/sentry_sdk}/opentelemetry/propagator.py +19 -28
  84. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/sampler.py +326 -0
  85. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/scope.py +218 -0
  86. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/span_processor.py +329 -0
  87. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/tracing.py +35 -0
  88. sentry_sdk-3.0.0a1/sentry_sdk/opentelemetry/utils.py +476 -0
  89. sentry_sdk-3.0.0a1/sentry_sdk/profiler/__init__.py +9 -0
  90. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/profiler/continuous_profiler.py +1 -30
  91. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/profiler/transaction_profiler.py +5 -56
  92. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/scope.py +107 -351
  93. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/sessions.py +0 -87
  94. sentry_sdk-3.0.0a1/sentry_sdk/tracing.py +642 -0
  95. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/tracing_utils.py +126 -164
  96. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/transport.py +4 -104
  97. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/utils.py +169 -152
  98. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1/sentry_sdk.egg-info}/PKG-INFO +3 -5
  99. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk.egg-info/SOURCES.txt +10 -8
  100. sentry_sdk-3.0.0a1/sentry_sdk.egg-info/entry_points.txt +2 -0
  101. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk.egg-info/requires.txt +1 -3
  102. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/setup.py +5 -6
  103. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_ai_monitoring.py +4 -4
  104. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_api.py +29 -62
  105. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_basics.py +34 -220
  106. sentry_sdk-3.0.0a1/tests/test_breadcrumbs.py +86 -0
  107. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_client.py +1 -64
  108. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_dsc.py +231 -24
  109. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_exceptiongroup.py +249 -2
  110. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_feature_flags.py +73 -0
  111. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_logs.py +65 -31
  112. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_monitor.py +27 -8
  113. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_propagationcontext.py +13 -10
  114. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_scope.py +36 -11
  115. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_scrubber.py +9 -5
  116. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_sessions.py +4 -105
  117. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_transport.py +3 -141
  118. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_utils.py +81 -49
  119. sentry_sdk-2.27.0/sentry_sdk/_init_implementation.py +0 -84
  120. sentry_sdk-2.27.0/sentry_sdk/hub.py +0 -739
  121. sentry_sdk-2.27.0/sentry_sdk/integrations/opentelemetry/__init__.py +0 -7
  122. sentry_sdk-2.27.0/sentry_sdk/integrations/opentelemetry/consts.py +0 -5
  123. sentry_sdk-2.27.0/sentry_sdk/integrations/opentelemetry/integration.py +0 -58
  124. sentry_sdk-2.27.0/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -391
  125. sentry_sdk-2.27.0/sentry_sdk/metrics.py +0 -965
  126. sentry_sdk-2.27.0/sentry_sdk/profiler/__init__.py +0 -49
  127. sentry_sdk-2.27.0/sentry_sdk/tracing.py +0 -1368
  128. sentry_sdk-2.27.0/sentry_sdk.egg-info/entry_points.txt +0 -2
  129. sentry_sdk-2.27.0/tests/test_metrics.py +0 -971
  130. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/LICENSE +0 -0
  131. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/MANIFEST.in +0 -0
  132. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/README.md +0 -0
  133. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/pyproject.toml +0 -0
  134. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/_lru_cache.py +0 -0
  135. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/_queue.py +0 -0
  136. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/_werkzeug.py +0 -0
  137. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/ai/__init__.py +0 -0
  138. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/attachments.py +0 -0
  139. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/crons/__init__.py +0 -0
  140. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/crons/api.py +0 -0
  141. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/crons/consts.py +0 -0
  142. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/crons/decorator.py +0 -0
  143. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/argv.py +0 -0
  144. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/ariadne.py +0 -0
  145. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/atexit.py +0 -0
  146. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/beam.py +0 -0
  147. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/celery/beat.py +0 -0
  148. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/celery/utils.py +0 -0
  149. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/chalice.py +0 -0
  150. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
  151. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/dedupe.py +0 -0
  152. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/dramatiq.py +0 -0
  153. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/excepthook.py +0 -0
  154. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/executing.py +0 -0
  155. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
  156. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/gql.py +0 -0
  157. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/__init__.py +0 -0
  158. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
  159. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/grpc/consts.py +0 -0
  160. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/launchdarkly.py +0 -0
  161. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/loguru.py +0 -0
  162. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/modules.py +0 -0
  163. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/openfeature.py +0 -0
  164. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/pure_eval.py +0 -0
  165. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/__init__.py +0 -0
  166. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/consts.py +0 -0
  167. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
  168. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/serverless.py +0 -0
  169. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/spark/__init__.py +0 -0
  170. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
  171. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
  172. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/statsig.py +0 -0
  173. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/sys_exit.py +0 -0
  174. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/typer.py +0 -0
  175. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/integrations/unleash.py +0 -0
  176. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/logger.py +0 -0
  177. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/monitor.py +0 -0
  178. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/profiler/utils.py +0 -0
  179. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/py.typed +0 -0
  180. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/scrubber.py +0 -0
  181. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/serializer.py +0 -0
  182. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/session.py +0 -0
  183. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/spotlight.py +0 -0
  184. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/types.py +0 -0
  185. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk/worker.py +0 -0
  186. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk.egg-info/dependency_links.txt +0 -0
  187. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk.egg-info/not-zip-safe +0 -0
  188. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/sentry_sdk.egg-info/top_level.txt +0 -0
  189. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/setup.cfg +0 -0
  190. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_conftest.py +0 -0
  191. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_crons.py +0 -0
  192. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_envelope.py +0 -0
  193. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_full_stack_frames.py +0 -0
  194. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_import.py +0 -0
  195. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_lru_cache.py +0 -0
  196. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_serializer.py +0 -0
  197. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_spotlight.py +0 -0
  198. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_tracing_utils.py +0 -0
  199. {sentry_sdk-2.27.0 → sentry_sdk-3.0.0a1}/tests/test_types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.27.0
3
+ Version: 3.0.0a1
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
@@ -15,7 +15,6 @@ Classifier: License :: OSI Approved :: BSD License
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
17
  Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.6
19
18
  Classifier: Programming Language :: Python :: 3.7
20
19
  Classifier: Programming Language :: Python :: 3.8
21
20
  Classifier: Programming Language :: Python :: 3.9
@@ -24,11 +23,12 @@ Classifier: Programming Language :: Python :: 3.11
24
23
  Classifier: Programming Language :: Python :: 3.12
25
24
  Classifier: Programming Language :: Python :: 3.13
26
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
- Requires-Python: >=3.6
26
+ Requires-Python: >=3.7
28
27
  Description-Content-Type: text/markdown
29
28
  License-File: LICENSE
30
29
  Requires-Dist: urllib3>=1.26.11
31
30
  Requires-Dist: certifi
31
+ Requires-Dist: opentelemetry-sdk>=1.4.0
32
32
  Provides-Extra: aiohttp
33
33
  Requires-Dist: aiohttp>=3.5; extra == "aiohttp"
34
34
  Provides-Extra: anthropic
@@ -85,8 +85,6 @@ Provides-Extra: openfeature
85
85
  Requires-Dist: openfeature-sdk>=0.7.1; extra == "openfeature"
86
86
  Provides-Extra: opentelemetry
87
87
  Requires-Dist: opentelemetry-distro>=0.35b0; extra == "opentelemetry"
88
- Provides-Extra: opentelemetry-experimental
89
- Requires-Dist: opentelemetry-distro; extra == "opentelemetry-experimental"
90
88
  Provides-Extra: pure-eval
91
89
  Requires-Dist: pure_eval; extra == "pure-eval"
92
90
  Requires-Dist: executing; extra == "pure-eval"
@@ -1,4 +1,6 @@
1
- from sentry_sdk.scope import Scope
1
+ # TODO-neel scope switch
2
+ # TODO-neel avoid duplication between api and __init__
3
+ from sentry_sdk.opentelemetry.scope import PotelScope as Scope
2
4
  from sentry_sdk.transport import Transport, HttpTransport
3
5
  from sentry_sdk.client import Client
4
6
 
@@ -7,7 +9,6 @@ from sentry_sdk.api import * # noqa
7
9
  from sentry_sdk.consts import VERSION # noqa
8
10
 
9
11
  __all__ = [ # noqa
10
- "Hub",
11
12
  "Scope",
12
13
  "Client",
13
14
  "Transport",
@@ -15,11 +16,11 @@ __all__ = [ # noqa
15
16
  "integrations",
16
17
  # From sentry_sdk.api
17
18
  "init",
19
+ "add_attachment",
18
20
  "add_breadcrumb",
19
21
  "capture_event",
20
22
  "capture_exception",
21
23
  "capture_message",
22
- "configure_scope",
23
24
  "continue_trace",
24
25
  "flush",
25
26
  "get_baggage",
@@ -33,11 +34,9 @@ __all__ = [ # noqa
33
34
  "isolation_scope",
34
35
  "last_event_id",
35
36
  "new_scope",
36
- "push_scope",
37
37
  "set_context",
38
38
  "set_extra",
39
39
  "set_level",
40
- "set_measurement",
41
40
  "set_tag",
42
41
  "set_tags",
43
42
  "set_user",
@@ -53,6 +52,3 @@ from sentry_sdk.debug import init_debug_support
53
52
 
54
53
  init_debug_support()
55
54
  del init_debug_support
56
-
57
- # circular imports
58
- from sentry_sdk.hub import Hub
@@ -9,7 +9,6 @@ if TYPE_CHECKING:
9
9
  T = TypeVar("T")
10
10
 
11
11
 
12
- PY37 = sys.version_info[0] == 3 and sys.version_info[1] >= 7
13
12
  PY38 = sys.version_info[0] == 3 and sys.version_info[1] >= 8
14
13
  PY310 = sys.version_info[0] == 3 and sys.version_info[1] >= 10
15
14
  PY311 = sys.version_info[0] == 3 and sys.version_info[1] >= 11
@@ -0,0 +1,46 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ import sentry_sdk
4
+ from sentry_sdk.consts import ClientConstructor
5
+ from sentry_sdk.opentelemetry.scope import setup_scope_context_management
6
+
7
+ if TYPE_CHECKING:
8
+ from typing import Any, Optional
9
+
10
+
11
+ def _check_python_deprecations():
12
+ # type: () -> None
13
+ # Since we're likely to deprecate Python versions in the future, I'm keeping
14
+ # this handy function around. Use this to detect the Python version used and
15
+ # to output logger.warning()s if it's deprecated.
16
+ pass
17
+
18
+
19
+ def _init(*args, **kwargs):
20
+ # type: (*Optional[str], **Any) -> None
21
+ """Initializes the SDK and optionally integrations.
22
+
23
+ This takes the same arguments as the client constructor.
24
+ """
25
+ setup_scope_context_management()
26
+ client = sentry_sdk.Client(*args, **kwargs)
27
+ sentry_sdk.get_global_scope().set_client(client)
28
+ _check_python_deprecations()
29
+
30
+
31
+ if TYPE_CHECKING:
32
+ # Make mypy, PyCharm and other static analyzers think `init` is a type to
33
+ # have nicer autocompletion for params.
34
+ #
35
+ # Use `ClientConstructor` to define the argument types of `init` and
36
+ # `ContextManager[Any]` to tell static analyzers about the return type.
37
+
38
+ class init(ClientConstructor): # noqa: N801
39
+ pass
40
+
41
+ else:
42
+ # Alias `init` for actual usage. Go through the lambda indirection to throw
43
+ # PyCharm off of the weakly typed signature (it would otherwise discover
44
+ # both the weakly typed signature of `_init` and our faked `init` type).
45
+
46
+ init = (lambda: _init)()
@@ -5,7 +5,7 @@ from datetime import datetime, timezone
5
5
  from typing import Optional, List, Callable, TYPE_CHECKING, Any
6
6
 
7
7
  from sentry_sdk.utils import format_timestamp, safe_repr
8
- from sentry_sdk.envelope import Envelope
8
+ from sentry_sdk.envelope import Envelope, Item, PayloadRef
9
9
 
10
10
  if TYPE_CHECKING:
11
11
  from sentry_sdk._types import Log
@@ -97,34 +97,36 @@ class LogBatcher:
97
97
  self._flush()
98
98
 
99
99
  @staticmethod
100
- def _log_to_otel(log):
100
+ def _log_to_transport_format(log):
101
101
  # type: (Log) -> Any
102
- def format_attribute(key, val):
103
- # type: (str, int | float | str | bool) -> Any
102
+ def format_attribute(val):
103
+ # type: (int | float | str | bool) -> Any
104
104
  if isinstance(val, bool):
105
- return {"key": key, "value": {"boolValue": val}}
105
+ return {"value": val, "type": "boolean"}
106
106
  if isinstance(val, int):
107
- return {"key": key, "value": {"intValue": str(val)}}
107
+ return {"value": val, "type": "integer"}
108
108
  if isinstance(val, float):
109
- return {"key": key, "value": {"doubleValue": val}}
109
+ return {"value": val, "type": "double"}
110
110
  if isinstance(val, str):
111
- return {"key": key, "value": {"stringValue": val}}
112
- return {"key": key, "value": {"stringValue": safe_repr(val)}}
113
-
114
- otel_log = {
115
- "severityText": log["severity_text"],
116
- "severityNumber": log["severity_number"],
117
- "body": {"stringValue": log["body"]},
118
- "timeUnixNano": str(log["time_unix_nano"]),
119
- "attributes": [
120
- format_attribute(k, v) for (k, v) in log["attributes"].items()
121
- ],
111
+ return {"value": val, "type": "string"}
112
+ return {"value": safe_repr(val), "type": "string"}
113
+
114
+ if "sentry.severity_number" not in log["attributes"]:
115
+ log["attributes"]["sentry.severity_number"] = log["severity_number"]
116
+ if "sentry.severity_text" not in log["attributes"]:
117
+ log["attributes"]["sentry.severity_text"] = log["severity_text"]
118
+
119
+ res = {
120
+ "timestamp": int(log["time_unix_nano"]) / 1.0e9,
121
+ "trace_id": log.get("trace_id", "00000000-0000-0000-0000-000000000000"),
122
+ "level": str(log["severity_text"]),
123
+ "body": str(log["body"]),
124
+ "attributes": {
125
+ k: format_attribute(v) for (k, v) in log["attributes"].items()
126
+ },
122
127
  }
123
128
 
124
- if "trace_id" in log:
125
- otel_log["traceId"] = log["trace_id"]
126
-
127
- return otel_log
129
+ return res
128
130
 
129
131
  def _flush(self):
130
132
  # type: (...) -> Optional[Envelope]
@@ -133,10 +135,27 @@ class LogBatcher:
133
135
  headers={"sent_at": format_timestamp(datetime.now(timezone.utc))}
134
136
  )
135
137
  with self._lock:
136
- for log in self._log_buffer:
137
- envelope.add_log(self._log_to_otel(log))
138
+ if len(self._log_buffer) == 0:
139
+ return None
140
+
141
+ envelope.add_item(
142
+ Item(
143
+ type="log",
144
+ content_type="application/vnd.sentry.items.log+json",
145
+ headers={
146
+ "item_count": len(self._log_buffer),
147
+ },
148
+ payload=PayloadRef(
149
+ json={
150
+ "items": [
151
+ self._log_to_transport_format(log)
152
+ for log in self._log_buffer
153
+ ]
154
+ }
155
+ ),
156
+ )
157
+ )
138
158
  self._log_buffer.clear()
139
- if envelope.items:
140
- self._capture_func(envelope)
141
- return envelope
142
- return None
159
+
160
+ self._capture_func(envelope)
161
+ return envelope
@@ -107,9 +107,7 @@ if TYPE_CHECKING:
107
107
  from typing import Callable
108
108
  from typing import Dict
109
109
  from typing import Mapping
110
- from typing import NotRequired
111
110
  from typing import Optional
112
- from typing import Tuple
113
111
  from typing import Type
114
112
  from typing_extensions import Literal, TypedDict
115
113
 
@@ -121,45 +119,6 @@ if TYPE_CHECKING:
121
119
  # "critical" is an alias of "fatal" recognized by Relay
122
120
  LogLevelStr = Literal["fatal", "critical", "error", "warning", "info", "debug"]
123
121
 
124
- DurationUnit = Literal[
125
- "nanosecond",
126
- "microsecond",
127
- "millisecond",
128
- "second",
129
- "minute",
130
- "hour",
131
- "day",
132
- "week",
133
- ]
134
-
135
- InformationUnit = Literal[
136
- "bit",
137
- "byte",
138
- "kilobyte",
139
- "kibibyte",
140
- "megabyte",
141
- "mebibyte",
142
- "gigabyte",
143
- "gibibyte",
144
- "terabyte",
145
- "tebibyte",
146
- "petabyte",
147
- "pebibyte",
148
- "exabyte",
149
- "exbibyte",
150
- ]
151
-
152
- FractionUnit = Literal["ratio", "percent"]
153
- MeasurementUnit = Union[DurationUnit, InformationUnit, FractionUnit, str]
154
-
155
- MeasurementValue = TypedDict(
156
- "MeasurementValue",
157
- {
158
- "value": float,
159
- "unit": NotRequired[Optional[MeasurementUnit]],
160
- },
161
- )
162
-
163
122
  Event = TypedDict(
164
123
  "Event",
165
124
  {
@@ -181,7 +140,6 @@ if TYPE_CHECKING:
181
140
  "level": LogLevelStr,
182
141
  "logentry": Mapping[str, object],
183
142
  "logger": str,
184
- "measurements": dict[str, MeasurementValue],
185
143
  "message": str,
186
144
  "modules": dict[str, str],
187
145
  "monitor_config": Mapping[str, object],
@@ -210,7 +168,6 @@ if TYPE_CHECKING:
210
168
  "type": Literal["check_in", "transaction"],
211
169
  "user": dict[str, object],
212
170
  "_dropped_spans": int,
213
- "_metrics_summary": dict[str, object],
214
171
  },
215
172
  total=False,
216
173
  )
@@ -266,7 +223,6 @@ if TYPE_CHECKING:
266
223
  "internal",
267
224
  "profile",
268
225
  "profile_chunk",
269
- "metric_bucket",
270
226
  "monitor",
271
227
  "span",
272
228
  "log",
@@ -276,26 +232,6 @@ if TYPE_CHECKING:
276
232
  ContinuousProfilerMode = Literal["thread", "gevent", "unknown"]
277
233
  ProfilerMode = Union[ContinuousProfilerMode, Literal["sleep"]]
278
234
 
279
- # Type of the metric.
280
- MetricType = Literal["d", "s", "g", "c"]
281
-
282
- # Value of the metric.
283
- MetricValue = Union[int, float, str]
284
-
285
- # Internal representation of tags as a tuple of tuples (this is done in order to allow for the same key to exist
286
- # multiple times).
287
- MetricTagsInternal = Tuple[Tuple[str, str], ...]
288
-
289
- # External representation of tags as a dictionary.
290
- MetricTagValue = Union[str, int, float, None]
291
- MetricTags = Mapping[str, MetricTagValue]
292
-
293
- # Value inside the generator for the metric value.
294
- FlushedMetricValue = Union[int, float]
295
-
296
- BucketKey = Tuple[MetricType, str, MeasurementUnit, MetricTagsInternal]
297
- MetricMetaKey = Tuple[MetricType, str, MeasurementUnit]
298
-
299
235
  MonitorConfigScheduleType = Literal["crontab", "interval"]
300
236
  MonitorConfigScheduleUnit = Literal[
301
237
  "year",
@@ -331,3 +267,5 @@ if TYPE_CHECKING:
331
267
  )
332
268
 
333
269
  HttpStatusCodeRange = Union[int, Container[int]]
270
+
271
+ OtelExtractedSpanData = tuple[str, str, Optional[str], Optional[int], Optional[str]]
@@ -33,13 +33,15 @@ def ai_track(description, **span_kwargs):
33
33
  curr_pipeline = _ai_pipeline_name.get()
34
34
  op = span_kwargs.get("op", "ai.run" if curr_pipeline else "ai.pipeline")
35
35
 
36
- with start_span(name=description, op=op, **span_kwargs) as span:
36
+ with start_span(
37
+ name=description, op=op, only_if_parent=True, **span_kwargs
38
+ ) as span:
37
39
  for k, v in kwargs.pop("sentry_tags", {}).items():
38
40
  span.set_tag(k, v)
39
41
  for k, v in kwargs.pop("sentry_data", {}).items():
40
- span.set_data(k, v)
42
+ span.set_attribute(k, v)
41
43
  if curr_pipeline:
42
- span.set_data("ai.pipeline.name", curr_pipeline)
44
+ span.set_attribute("ai.pipeline.name", curr_pipeline)
43
45
  return f(*args, **kwargs)
44
46
  else:
45
47
  _ai_pipeline_name.set(description)
@@ -62,13 +64,15 @@ def ai_track(description, **span_kwargs):
62
64
  curr_pipeline = _ai_pipeline_name.get()
63
65
  op = span_kwargs.get("op", "ai.run" if curr_pipeline else "ai.pipeline")
64
66
 
65
- with start_span(name=description, op=op, **span_kwargs) as span:
67
+ with start_span(
68
+ name=description, op=op, only_if_parent=True, **span_kwargs
69
+ ) as span:
66
70
  for k, v in kwargs.pop("sentry_tags", {}).items():
67
71
  span.set_tag(k, v)
68
72
  for k, v in kwargs.pop("sentry_data", {}).items():
69
- span.set_data(k, v)
73
+ span.set_attribute(k, v)
70
74
  if curr_pipeline:
71
- span.set_data("ai.pipeline.name", curr_pipeline)
75
+ span.set_attribute("ai.pipeline.name", curr_pipeline)
72
76
  return await f(*args, **kwargs)
73
77
  else:
74
78
  _ai_pipeline_name.set(description)
@@ -100,11 +104,11 @@ def record_token_usage(
100
104
  # type: (Span, Optional[int], Optional[int], Optional[int]) -> None
101
105
  ai_pipeline_name = get_ai_pipeline_name()
102
106
  if ai_pipeline_name:
103
- span.set_data("ai.pipeline.name", ai_pipeline_name)
107
+ span.set_attribute("ai.pipeline.name", ai_pipeline_name)
104
108
  if prompt_tokens is not None:
105
- span.set_measurement("ai_prompt_tokens_used", value=prompt_tokens)
109
+ span.set_attribute("ai.prompt_tokens.used", prompt_tokens)
106
110
  if completion_tokens is not None:
107
- span.set_measurement("ai_completion_tokens_used", value=completion_tokens)
111
+ span.set_attribute("ai.completion_tokens.used", completion_tokens)
108
112
  if (
109
113
  total_tokens is None
110
114
  and prompt_tokens is not None
@@ -112,4 +116,4 @@ def record_token_usage(
112
116
  ):
113
117
  total_tokens = prompt_tokens + completion_tokens
114
118
  if total_tokens is not None:
115
- span.set_measurement("ai_total_tokens_used", total_tokens)
119
+ span.set_attribute("ai.total_tokens.used", total_tokens)
@@ -29,4 +29,4 @@ def _normalize_data(data):
29
29
  def set_data_normalized(span, key, value):
30
30
  # type: (Span, str, Any) -> None
31
31
  normalized = _normalize_data(value)
32
- span.set_data(key, normalized)
32
+ span.set_attribute(key, normalized)