sentry-sdk 2.72.0__tar.gz → 2.74.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.
Files changed (563) hide show
  1. {sentry_sdk-2.72.0/sentry_sdk.egg-info → sentry_sdk-2.74.0}/PKG-INFO +2 -2
  2. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/pyproject.toml +3 -3
  3. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/consts.py +1 -1
  4. sentry_sdk-2.74.0/sentry_sdk/crons/utils.py +29 -0
  5. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/aiohttp.py +14 -0
  6. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/anthropic.py +115 -36
  7. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/arq.py +137 -3
  8. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/celery/beat.py +22 -15
  9. sentry_sdk-2.74.0/sentry_sdk/integrations/celery/utils.py +10 -0
  10. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/cohere.py +18 -9
  11. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/falcon.py +9 -6
  12. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/huey.py +105 -3
  13. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/huggingface_hub.py +66 -49
  14. sentry_sdk-2.74.0/sentry_sdk/integrations/rq.py +363 -0
  15. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/starlette.py +0 -10
  16. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/stdlib.py +15 -1
  17. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/trytond.py +3 -3
  18. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/typesafe.py +51 -14
  19. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/wsgi.py +0 -4
  20. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/scope.py +14 -2
  21. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/sessions.py +0 -1
  22. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/tracing_utils.py +1 -13
  23. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/types.py +3 -0
  24. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/utils.py +3 -6
  25. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0/sentry_sdk.egg-info}/PKG-INFO +2 -2
  26. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk.egg-info/SOURCES.txt +4 -0
  27. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk.egg-info/requires.txt +1 -1
  28. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/setup.py +2 -2
  29. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/conftest.py +0 -13
  30. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aiohttp/test_aiohttp.py +19 -7
  31. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/anthropic/test_anthropic.py +1050 -858
  32. sentry_sdk-2.74.0/tests/integrations/arq/test_arq_crons.py +268 -0
  33. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/test_trace_propagation.py +16 -4
  34. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/celery/test_celery_beat_crons.py +55 -20
  35. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/falcon/test_falcon.py +125 -7
  36. sentry_sdk-2.74.0/tests/integrations/huey/test_huey_crons.py +225 -0
  37. sentry_sdk-2.74.0/tests/integrations/rq/test_rq_crons.py +276 -0
  38. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/stdlib/test_httplib.py +2 -2
  39. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/typesafe/test_typesafe.py +139 -0
  40. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_attributes.py +31 -0
  41. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_crons.py +27 -0
  42. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_dsc.py +4 -4
  43. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_monitor.py +12 -3
  44. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_tracing_utils.py +2 -2
  45. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_baggage.py +21 -0
  46. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_integration_tests.py +3 -3
  47. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_span_streaming.py +2 -10
  48. sentry_sdk-2.72.0/sentry_sdk/integrations/celery/utils.py +0 -32
  49. sentry_sdk-2.72.0/sentry_sdk/integrations/rq.py +0 -231
  50. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/LICENSE +0 -0
  51. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/MANIFEST.in +0 -0
  52. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/README.md +0 -0
  53. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/__init__.py +0 -0
  54. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_batcher.py +0 -0
  55. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_compat.py +0 -0
  56. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_init_implementation.py +0 -0
  57. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_log_batcher.py +0 -0
  58. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_lru_cache.py +0 -0
  59. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_metrics_batcher.py +0 -0
  60. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_queue.py +0 -0
  61. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_span_batcher.py +0 -0
  62. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_types.py +0 -0
  63. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/_werkzeug.py +0 -0
  64. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/ai/__init__.py +0 -0
  65. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/ai/_openai_completions_api.py +0 -0
  66. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/ai/_openai_responses_api.py +0 -0
  67. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/ai/consts.py +0 -0
  68. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/ai/monitoring.py +0 -0
  69. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/ai/utils.py +0 -0
  70. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/api.py +0 -0
  71. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/attachments.py +0 -0
  72. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/client.py +0 -0
  73. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/crons/__init__.py +0 -0
  74. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/crons/api.py +0 -0
  75. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/crons/consts.py +0 -0
  76. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/crons/decorator.py +0 -0
  77. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/data_collection.py +0 -0
  78. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/debug.py +0 -0
  79. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/envelope.py +0 -0
  80. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/feature_flags.py +0 -0
  81. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/hub.py +0 -0
  82. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/__init__.py +0 -0
  83. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/_asgi_common.py +0 -0
  84. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/_wsgi_common.py +0 -0
  85. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/aiomysql.py +0 -0
  86. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/argv.py +0 -0
  87. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/ariadne.py +0 -0
  88. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/asgi.py +0 -0
  89. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/asyncio.py +0 -0
  90. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/asyncpg.py +0 -0
  91. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/atexit.py +0 -0
  92. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/aws_lambda.py +0 -0
  93. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/beam.py +0 -0
  94. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/__init__.py +0 -0
  95. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/_client.py +0 -0
  96. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/_context.py +0 -0
  97. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/_instrumentation.py +0 -0
  98. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/_services/__init__.py +0 -0
  99. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/_services/base.py +0 -0
  100. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/_services/registry.py +0 -0
  101. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/boto3/consts.py +0 -0
  102. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/bottle.py +0 -0
  103. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/celery/__init__.py +0 -0
  104. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/chalice.py +0 -0
  105. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/clickhouse_driver.py +0 -0
  106. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
  107. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/dedupe.py +0 -0
  108. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/__init__.py +0 -0
  109. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/asgi.py +0 -0
  110. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/caching.py +0 -0
  111. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/middleware.py +0 -0
  112. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/signals_handlers.py +0 -0
  113. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/tasks.py +0 -0
  114. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/templates.py +0 -0
  115. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/transactions.py +0 -0
  116. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/django/views.py +0 -0
  117. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/dramatiq.py +0 -0
  118. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/excepthook.py +0 -0
  119. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/executing.py +0 -0
  120. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/fastapi.py +0 -0
  121. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/flask.py +0 -0
  122. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/gcp.py +0 -0
  123. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
  124. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/google_genai/__init__.py +0 -0
  125. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/google_genai/consts.py +0 -0
  126. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/google_genai/streaming.py +0 -0
  127. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/google_genai/utils.py +0 -0
  128. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/gql.py +0 -0
  129. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/graphene.py +0 -0
  130. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/__init__.py +0 -0
  131. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
  132. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/aio/client.py +0 -0
  133. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/aio/server.py +0 -0
  134. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/client.py +0 -0
  135. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/consts.py +0 -0
  136. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/grpc/server.py +0 -0
  137. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/httpx.py +0 -0
  138. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/httpx2.py +0 -0
  139. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/langchain.py +0 -0
  140. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/langgraph.py +0 -0
  141. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/launchdarkly.py +0 -0
  142. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/litellm.py +0 -0
  143. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/litestar.py +0 -0
  144. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/logging.py +0 -0
  145. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/loguru.py +0 -0
  146. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/mcp.py +0 -0
  147. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/mistral.py +0 -0
  148. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/modules.py +0 -0
  149. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai.py +0 -0
  150. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/__init__.py +0 -0
  151. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/consts.py +0 -0
  152. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/patches/__init__.py +0 -0
  153. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/patches/agent_run.py +0 -0
  154. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/patches/error_tracing.py +0 -0
  155. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/patches/models.py +0 -0
  156. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/patches/runner.py +0 -0
  157. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/patches/tools.py +0 -0
  158. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/spans/__init__.py +0 -0
  159. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +0 -0
  160. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/spans/ai_client.py +0 -0
  161. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/spans/execute_tool.py +0 -0
  162. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/spans/handoff.py +0 -0
  163. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +0 -0
  164. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openai_agents/utils.py +0 -0
  165. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/openfeature.py +0 -0
  166. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/opentelemetry/__init__.py +0 -0
  167. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/opentelemetry/consts.py +0 -0
  168. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/opentelemetry/integration.py +0 -0
  169. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/opentelemetry/propagator.py +0 -0
  170. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -0
  171. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/otlp.py +0 -0
  172. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pure_eval.py +0 -0
  173. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/__init__.py +0 -0
  174. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/consts.py +0 -0
  175. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/patches/__init__.py +0 -0
  176. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/patches/agent_run.py +0 -0
  177. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/patches/graph_nodes.py +0 -0
  178. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/patches/tools.py +0 -0
  179. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/spans/__init__.py +0 -0
  180. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/spans/ai_client.py +0 -0
  181. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/spans/execute_tool.py +0 -0
  182. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/spans/invoke_agent.py +0 -0
  183. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/spans/utils.py +0 -0
  184. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pydantic_ai/utils.py +0 -0
  185. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pymongo.py +0 -0
  186. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pyramid.py +0 -0
  187. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/pyreqwest.py +0 -0
  188. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/quart.py +0 -0
  189. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/ray.py +0 -0
  190. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/__init__.py +0 -0
  191. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/_async_common.py +0 -0
  192. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/_sync_common.py +0 -0
  193. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/consts.py +0 -0
  194. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
  195. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/modules/caches.py +0 -0
  196. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/modules/queries.py +0 -0
  197. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/rb.py +0 -0
  198. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/redis.py +0 -0
  199. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/redis_cluster.py +0 -0
  200. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +0 -0
  201. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/redis/utils.py +0 -0
  202. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/rust_tracing.py +0 -0
  203. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/sanic.py +0 -0
  204. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/serverless.py +0 -0
  205. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/socket.py +0 -0
  206. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/spark/__init__.py +0 -0
  207. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
  208. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
  209. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/sqlalchemy.py +0 -0
  210. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/starlite.py +0 -0
  211. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/statsig.py +0 -0
  212. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/strawberry.py +0 -0
  213. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/sys_exit.py +0 -0
  214. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/threading.py +0 -0
  215. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/tornado.py +0 -0
  216. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/typer.py +0 -0
  217. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/unleash.py +0 -0
  218. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/integrations/unraisablehook.py +0 -0
  219. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/logger.py +0 -0
  220. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/metrics.py +0 -0
  221. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/monitor.py +0 -0
  222. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/profiler/__init__.py +0 -0
  223. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/profiler/continuous_profiler.py +0 -0
  224. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/profiler/transaction_profiler.py +0 -0
  225. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/profiler/utils.py +0 -0
  226. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/py.typed +0 -0
  227. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/scrubber.py +0 -0
  228. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/serializer.py +0 -0
  229. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/session.py +0 -0
  230. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/spotlight.py +0 -0
  231. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/traces.py +0 -0
  232. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/tracing.py +0 -0
  233. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/transport.py +0 -0
  234. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk/worker.py +0 -0
  235. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk.egg-info/dependency_links.txt +0 -0
  236. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk.egg-info/entry_points.txt +0 -0
  237. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk.egg-info/not-zip-safe +0 -0
  238. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/sentry_sdk.egg-info/top_level.txt +0 -0
  239. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/setup.cfg +0 -0
  240. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/__init__.py +0 -0
  241. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/__init__.py +0 -0
  242. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aiohttp/__init__.py +0 -0
  243. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aiohttp/aiohttp_helpers/__init__.py +0 -0
  244. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aiohttp/aiohttp_helpers/helpers.py +0 -0
  245. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aiomysql/__init__.py +0 -0
  246. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aiomysql/test_aiomysql.py +0 -0
  247. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/anthropic/__init__.py +0 -0
  248. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/argv/test_argv.py +0 -0
  249. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/ariadne/__init__.py +0 -0
  250. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/ariadne/test_ariadne.py +0 -0
  251. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/arq/__init__.py +0 -0
  252. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/arq/test_arq.py +0 -0
  253. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asgi/__init__.py +0 -0
  254. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asgi/test_asgi.py +0 -0
  255. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asyncio/__init__.py +0 -0
  256. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asyncio/test_asyncio.py +0 -0
  257. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asyncpg/__init__.py +0 -0
  258. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asyncpg/asyncpg_helpers/__init__.py +0 -0
  259. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asyncpg/asyncpg_helpers/helpers.py +0 -0
  260. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/asyncpg/test_asyncpg.py +0 -0
  261. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/__init__.py +0 -0
  262. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions/BasicException/index.py +0 -0
  263. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions/BasicOk/index.py +0 -0
  264. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions/InitError/index.py +0 -0
  265. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions/TimeoutError/index.py +0 -0
  266. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionAllowlist/.gitignore +0 -0
  267. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionAllowlist/.lock +0 -0
  268. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionAllowlist/index.py +0 -0
  269. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionDenylist/.gitignore +0 -0
  270. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionDenylist/.lock +0 -0
  271. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionDenylist/index.py +0 -0
  272. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionOff/.gitignore +0 -0
  273. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionOff/.lock +0 -0
  274. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionOff/index.py +0 -0
  275. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryAllowlist/.gitignore +0 -0
  276. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryAllowlist/index.py +0 -0
  277. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryDenylist/.gitignore +0 -0
  278. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryDenylist/index.py +0 -0
  279. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryOff/.gitignore +0 -0
  280. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryOff/index.py +0 -0
  281. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOff/.gitignore +0 -0
  282. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOff/index.py +0 -0
  283. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOn/.gitignore +0 -0
  284. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOn/index.py +0 -0
  285. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSendDefaultPii/.gitignore +0 -0
  286. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSendDefaultPii/.lock +0 -0
  287. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSendDefaultPii/index.py +0 -0
  288. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreaming/.gitignore +0 -0
  289. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreaming/index.py +0 -0
  290. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollection/.gitignore +0 -0
  291. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollection/index.py +0 -0
  292. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollectionUserInfoOff/.gitignore +0 -0
  293. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollectionUserInfoOff/index.py +0 -0
  294. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollectionUserInfoOn/.gitignore +0 -0
  295. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollectionUserInfoOn/index.py +0 -0
  296. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingPii/.gitignore +0 -0
  297. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingPii/index.py +0 -0
  298. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceDisabled/.gitignore +0 -0
  299. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceDisabled/index.py +0 -0
  300. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceEnabled/.gitignore +0 -0
  301. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceEnabled/index.py +0 -0
  302. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorSpanStreaming/.gitignore +0 -0
  303. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorSpanStreaming/index.py +0 -0
  304. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TimeoutErrorScopeModified/.gitignore +0 -0
  305. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TimeoutErrorScopeModified/index.py +0 -0
  306. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TracesSampler/.gitignore +0 -0
  307. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TracesSampler/index.py +0 -0
  308. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/test_aws_lambda.py +0 -0
  309. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/aws_lambda/utils.py +0 -0
  310. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/beam/__init__.py +0 -0
  311. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/beam/test_beam.py +0 -0
  312. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/__init__.py +0 -0
  313. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/aws_mock.py +0 -0
  314. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/s3_list.xml +0 -0
  315. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/test_aws_http_connection.py +0 -0
  316. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/test_client.py +0 -0
  317. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/boto3/test_s3.py +0 -0
  318. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/bottle/__init__.py +0 -0
  319. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/bottle/test_bottle.py +0 -0
  320. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/celery/__init__.py +0 -0
  321. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/celery/integration_tests/__init__.py +0 -0
  322. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py +0 -0
  323. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/celery/test_celery.py +0 -0
  324. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/celery/test_update_celery_task_headers.py +0 -0
  325. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/chalice/__init__.py +0 -0
  326. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/chalice/test_chalice.py +0 -0
  327. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/clickhouse_driver/__init__.py +0 -0
  328. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/clickhouse_driver/test_clickhouse_driver.py +0 -0
  329. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/cloud_resource_context/__init__.py +0 -0
  330. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/cloud_resource_context/test_cloud_resource_context.py +0 -0
  331. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/cohere/__init__.py +0 -0
  332. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/cohere/test_cohere.py +0 -0
  333. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/conftest.py +0 -0
  334. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/__init__.py +0 -0
  335. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/asgi/__init__.py +0 -0
  336. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/asgi/image.png +0 -0
  337. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/asgi/test_asgi.py +0 -0
  338. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/django_helpers/__init__.py +0 -0
  339. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/django_helpers/views.py +0 -0
  340. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/__init__.py +0 -0
  341. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/asgi.py +0 -0
  342. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/custom_urls.py +0 -0
  343. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/manage.py +0 -0
  344. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/management/__init__.py +0 -0
  345. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/management/commands/__init__.py +0 -0
  346. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/management/commands/mycrash.py +0 -0
  347. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/middleware.py +0 -0
  348. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/routing.py +0 -0
  349. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/settings.py +0 -0
  350. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/signals.py +0 -0
  351. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/templates/error.html +0 -0
  352. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/templates/trace_meta.html +0 -0
  353. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/templates/user_name.html +0 -0
  354. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/urls.py +0 -0
  355. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/views.py +0 -0
  356. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/myapp/wsgi.py +0 -0
  357. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_basic.py +0 -0
  358. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_cache_module.py +0 -0
  359. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_data_scrubbing.py +0 -0
  360. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_db_query_data.py +0 -0
  361. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_db_transactions.py +0 -0
  362. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_middleware.py +0 -0
  363. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_tasks.py +0 -0
  364. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/test_transactions.py +0 -0
  365. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/django/utils.py +0 -0
  366. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/dramatiq/__init__.py +0 -0
  367. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/dramatiq/test_dramatiq.py +0 -0
  368. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/excepthook/test_excepthook.py +0 -0
  369. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/falcon/__init__.py +0 -0
  370. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/fastapi/__init__.py +0 -0
  371. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/fastapi/photo.jpg +0 -0
  372. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/fastapi/test_fastapi.py +0 -0
  373. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/fastmcp/__init__.py +0 -0
  374. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/fastmcp/test_fastmcp.py +0 -0
  375. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/flask/__init__.py +0 -0
  376. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/flask/test_flask.py +0 -0
  377. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/gcp/__init__.py +0 -0
  378. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/gcp/test_gcp.py +0 -0
  379. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/google_genai/__init__.py +0 -0
  380. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/google_genai/test_google_genai.py +0 -0
  381. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/gql/__init__.py +0 -0
  382. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/gql/test_gql.py +0 -0
  383. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/graphene/__init__.py +0 -0
  384. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/graphene/test_graphene.py +0 -0
  385. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/__init__.py +0 -0
  386. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/compile_test_services.sh +0 -0
  387. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/grpc_test_service_pb2.py +0 -0
  388. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/grpc_test_service_pb2.pyi +0 -0
  389. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/grpc_test_service_pb2_grpc.py +0 -0
  390. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/protos/grpc_test_service.proto +0 -0
  391. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/test_grpc.py +0 -0
  392. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/grpc/test_grpc_aio.py +0 -0
  393. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx/__init__.py +0 -0
  394. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx/httpx_helpers/__init__.py +0 -0
  395. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx/httpx_helpers/helpers.py +0 -0
  396. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx/test_httpx.py +0 -0
  397. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx2/__init__.py +0 -0
  398. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx2/httpx2_helpers/__init__.py +0 -0
  399. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx2/httpx2_helpers/helpers.py +0 -0
  400. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/httpx2/test_httpx2.py +0 -0
  401. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/huey/__init__.py +0 -0
  402. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/huey/test_huey.py +0 -0
  403. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/huggingface_hub/__init__.py +0 -0
  404. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/huggingface_hub/test_huggingface_hub.py +0 -0
  405. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/langchain/__init__.py +0 -0
  406. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/langchain/test_langchain.py +0 -0
  407. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/langgraph/__init__.py +0 -0
  408. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/langgraph/test_langgraph.py +0 -0
  409. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/launchdarkly/__init__.py +0 -0
  410. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/launchdarkly/test_launchdarkly.py +0 -0
  411. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/litellm/__init__.py +0 -0
  412. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/litellm/test_litellm.py +0 -0
  413. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/litestar/__init__.py +0 -0
  414. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/litestar/test_litestar.py +0 -0
  415. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/logging/test_logging.py +0 -0
  416. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/loguru/__init__.py +0 -0
  417. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/loguru/test_loguru.py +0 -0
  418. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/mcp/__init__.py +0 -0
  419. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/mcp/test_mcp.py +0 -0
  420. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/mistral/__init__.py +0 -0
  421. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/mistral/test_mistral.py +0 -0
  422. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/modules/test_modules.py +0 -0
  423. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/openai/__init__.py +0 -0
  424. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/openai/test_openai.py +0 -0
  425. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/openai_agents/__init__.py +0 -0
  426. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/openai_agents/test_openai_agents.py +0 -0
  427. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/openfeature/__init__.py +0 -0
  428. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/openfeature/test_openfeature.py +0 -0
  429. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/opentelemetry/__init__.py +0 -0
  430. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/opentelemetry/test_entry_points.py +0 -0
  431. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/opentelemetry/test_experimental.py +0 -0
  432. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/opentelemetry/test_propagator.py +0 -0
  433. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/opentelemetry/test_span_processor.py +0 -0
  434. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/otlp/__init__.py +0 -0
  435. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/otlp/test_otlp.py +0 -0
  436. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pure_eval/__init__.py +0 -0
  437. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pure_eval/test_pure_eval.py +0 -0
  438. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pydantic_ai/__init__.py +0 -0
  439. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pydantic_ai/test_pydantic_ai.py +0 -0
  440. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pymongo/__init__.py +0 -0
  441. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pymongo/test_pymongo.py +0 -0
  442. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pyramid/__init__.py +0 -0
  443. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pyramid/test_pyramid.py +0 -0
  444. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pyreqwest/__init__.py +0 -0
  445. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pyreqwest/pyreqwest_helpers/__init__.py +0 -0
  446. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pyreqwest/pyreqwest_helpers/helpers.py +0 -0
  447. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/pyreqwest/test_pyreqwest.py +0 -0
  448. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/quart/__init__.py +0 -0
  449. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/quart/test_quart.py +0 -0
  450. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/ray/__init__.py +0 -0
  451. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/ray/test_ray.py +0 -0
  452. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/__init__.py +0 -0
  453. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/asyncio/__init__.py +0 -0
  454. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/asyncio/test_redis_asyncio.py +0 -0
  455. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/cluster/__init__.py +0 -0
  456. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/cluster/test_redis_cluster.py +0 -0
  457. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/cluster_asyncio/__init__.py +0 -0
  458. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/cluster_asyncio/test_redis_cluster_asyncio.py +0 -0
  459. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/test_redis.py +0 -0
  460. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/test_redis_cache_module.py +0 -0
  461. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis/test_redis_cache_module_async.py +0 -0
  462. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis_py_cluster_legacy/__init__.py +0 -0
  463. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/redis_py_cluster_legacy/test_redis_py_cluster_legacy.py +0 -0
  464. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/requests/__init__.py +0 -0
  465. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/requests/test_requests.py +0 -0
  466. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/rq/__init__.py +0 -0
  467. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/rq/test_rq.py +0 -0
  468. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/rust_tracing/__init__.py +0 -0
  469. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/rust_tracing/test_rust_tracing.py +0 -0
  470. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sanic/__init__.py +0 -0
  471. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sanic/test_sanic.py +0 -0
  472. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/serverless/test_serverless.py +0 -0
  473. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/socket/__init__.py +0 -0
  474. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/socket/test_socket.py +0 -0
  475. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/spark/__init__.py +0 -0
  476. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/spark/test_spark.py +0 -0
  477. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sqlalchemy/__init__.py +0 -0
  478. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sqlalchemy/sqlalchemy_helpers/__init__.py +0 -0
  479. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sqlalchemy/sqlalchemy_helpers/helpers.py +0 -0
  480. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sqlalchemy/test_sqlalchemy.py +0 -0
  481. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/starlette/__init__.py +0 -0
  482. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/starlette/photo.jpg +0 -0
  483. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/starlette/templates/trace_meta.html +0 -0
  484. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/starlette/test_starlette.py +0 -0
  485. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/starlite/__init__.py +0 -0
  486. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/starlite/test_starlite.py +0 -0
  487. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/statsig/__init__.py +0 -0
  488. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/statsig/test_statsig.py +0 -0
  489. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/stdlib/__init__.py +0 -0
  490. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/stdlib/httplib_helpers/__init__.py +0 -0
  491. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/stdlib/httplib_helpers/helpers.py +0 -0
  492. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/stdlib/test_subprocess.py +0 -0
  493. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/strawberry/__init__.py +0 -0
  494. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/strawberry/test_strawberry.py +0 -0
  495. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/sys_exit/test_sys_exit.py +0 -0
  496. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/test_gnu_backtrace.py +0 -0
  497. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/threading/test_threading.py +0 -0
  498. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/tornado/__init__.py +0 -0
  499. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/tornado/test_tornado.py +0 -0
  500. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/trytond/__init__.py +0 -0
  501. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/trytond/test_trytond.py +0 -0
  502. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/typer/__init__.py +0 -0
  503. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/typer/test_typer.py +0 -0
  504. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/typesafe/__init__.py +0 -0
  505. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/unleash/__init__.py +0 -0
  506. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/unleash/test_unleash.py +0 -0
  507. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/unleash/testutils.py +0 -0
  508. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/unraisablehook/test_unraisablehook.py +0 -0
  509. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/utils.py +0 -0
  510. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/integrations/wsgi/test_wsgi.py +0 -0
  511. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/new_scopes_compat/__init__.py +0 -0
  512. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/new_scopes_compat/conftest.py +0 -0
  513. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/new_scopes_compat/test_new_scopes_compat.py +0 -0
  514. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/new_scopes_compat/test_new_scopes_compat_event.py +0 -0
  515. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/profiler/__init__.py +0 -0
  516. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/profiler/test_continuous_profiler.py +0 -0
  517. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/profiler/test_transaction_profiler.py +0 -0
  518. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test.key +0 -0
  519. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test.pem +0 -0
  520. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_ai_integration_deactivation.py +0 -0
  521. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_ai_monitoring.py +0 -0
  522. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_api.py +0 -0
  523. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_basics.py +0 -0
  524. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_client.py +0 -0
  525. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_conftest.py +0 -0
  526. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_data_collection.py +0 -0
  527. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_envelope.py +0 -0
  528. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_exceptiongroup.py +0 -0
  529. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_feature_flags.py +0 -0
  530. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_full_stack_frames.py +0 -0
  531. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_gevent.py +0 -0
  532. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_import.py +0 -0
  533. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_logs.py +0 -0
  534. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_lru_cache.py +0 -0
  535. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_metrics.py +0 -0
  536. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_propagationcontext.py +0 -0
  537. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_scope.py +0 -0
  538. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_scrubber.py +0 -0
  539. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_serializer.py +0 -0
  540. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_sessions.py +0 -0
  541. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_shadowed_module.py +0 -0
  542. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_spotlight.py +0 -0
  543. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_transport.py +0 -0
  544. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_types.py +0 -0
  545. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/test_utils.py +0 -0
  546. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_conversation_id.py +0 -0
  547. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_decorator.py +0 -0
  548. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_deprecated.py +0 -0
  549. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_http_headers.py +0 -0
  550. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_ignore_status_codes.py +0 -0
  551. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_misc.py +0 -0
  552. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_noop_span.py +0 -0
  553. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_propagation.py +0 -0
  554. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_sample_rand.py +0 -0
  555. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_sample_rand_propagation.py +0 -0
  556. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_sampling.py +0 -0
  557. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_span_batcher.py +0 -0
  558. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_span_name.py +0 -0
  559. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/tracing/test_span_origin.py +0 -0
  560. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/utils/__init__.py +0 -0
  561. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/utils/test_contextvars.py +0 -0
  562. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/utils/test_general.py +0 -0
  563. {sentry_sdk-2.72.0 → sentry_sdk-2.74.0}/tests/utils/test_transaction.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.72.0
3
+ Version: 2.74.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
@@ -80,7 +80,7 @@ Requires-Dist: langgraph>=0.6.6; extra == "langgraph"
80
80
  Provides-Extra: launchdarkly
81
81
  Requires-Dist: launchdarkly-server-sdk>=9.8.0; extra == "launchdarkly"
82
82
  Provides-Extra: litellm
83
- Requires-Dist: litellm!=1.82.7,!=1.82.8,>=1.77.5; extra == "litellm"
83
+ Requires-Dist: litellm!=1.107.0,!=1.82.7,!=1.82.8,>=1.77.5; extra == "litellm"
84
84
  Provides-Extra: litestar
85
85
  Requires-Dist: litestar>=2.0.0; extra == "litestar"
86
86
  Provides-Extra: loguru
@@ -16,7 +16,7 @@ dev = [
16
16
 
17
17
  toxgen = [
18
18
  "jinja2",
19
- "packaging<26.0",
19
+ "packaging",
20
20
  "pip",
21
21
  "requests",
22
22
  ]
@@ -24,7 +24,7 @@ toxgen = [
24
24
  docs = [
25
25
  "gevent",
26
26
  "shibuya",
27
- "sphinx<8.2",
27
+ "sphinx",
28
28
  "sphinx-autodoc-typehints[type_comments]>=2.3.0",
29
29
  "typing-extensions",
30
30
  ]
@@ -81,7 +81,7 @@ typing = [
81
81
  "aiohttp>=3.14.3",
82
82
  "openai-agents>=0.22.0",
83
83
  "mistralai>=2.10.1",
84
- "typesafe-sdk>=0.7.2",
84
+ "typesafe-sdk>=0.7.5",
85
85
  ]
86
86
  test = [
87
87
  "dataclasses ; python_full_version < '3.7'",
@@ -1924,4 +1924,4 @@ DEFAULT_OPTIONS = _get_default_options()
1924
1924
  del _get_default_options
1925
1925
 
1926
1926
 
1927
- VERSION = "2.72.0"
1927
+ VERSION = "2.74.0"
@@ -0,0 +1,29 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from typing import Optional, Tuple
5
+
6
+ from sentry_sdk._types import MonitorConfigSchedule, MonitorConfigScheduleUnit
7
+
8
+
9
+ _INTERVAL_UNITS: "Tuple[Tuple[MonitorConfigScheduleUnit, int], ...]" = (
10
+ ("day", 60 * 60 * 24),
11
+ ("hour", 60 * 60),
12
+ ("minute", 60),
13
+ )
14
+
15
+
16
+ def _get_interval_schedule(seconds: float) -> "Optional[MonitorConfigSchedule]":
17
+ """
18
+ Express an interval in the largest unit that divides it evenly.
19
+
20
+ Returns None if the interval isn't a whole number of minutes.
21
+ """
22
+ for unit, unit_seconds in _INTERVAL_UNITS:
23
+ if seconds >= unit_seconds and seconds % unit_seconds == 0:
24
+ return {
25
+ "type": "interval",
26
+ "value": int(seconds // unit_seconds),
27
+ "unit": unit,
28
+ }
29
+ return None
@@ -34,6 +34,7 @@ from sentry_sdk.tracing import (
34
34
  TransactionSource,
35
35
  )
36
36
  from sentry_sdk.tracing_utils import (
37
+ Baggage,
37
38
  add_http_breadcrumb,
38
39
  add_http_request_source,
39
40
  has_span_streaming_enabled,
@@ -488,6 +489,19 @@ def create_trace_config() -> "TraceConfig":
488
489
  if SENTRY_TRACE_HEADER_NAME in params.headers:
489
490
  headers_to_skip.add(SENTRY_TRACE_HEADER_NAME)
490
491
 
492
+ # `baggage` with Sentry members (e.g. merged by the boto3 integration
493
+ # before signing): skip so Sentry members are not duplicated.
494
+ with capture_internal_exceptions():
495
+ baggage = params.headers.get(BAGGAGE_HEADER_NAME)
496
+ if baggage:
497
+ if isinstance(baggage, bytes):
498
+ baggage = baggage.decode("latin-1")
499
+ if any(
500
+ Baggage.SENTRY_PREFIX_REGEX.match(item.strip())
501
+ for item in baggage.split(",")
502
+ ):
503
+ headers_to_skip.add(BAGGAGE_HEADER_NAME)
504
+
491
505
  with capture_internal_exceptions():
492
506
  authorization = params.headers.get("Authorization")
493
507
  if authorization:
@@ -64,6 +64,12 @@ try:
64
64
  except ImportError:
65
65
  raise DidNotEnable("Anthropic not installed")
66
66
 
67
+ try:
68
+ from anthropic.types import ThinkingBlock, ThinkingDelta
69
+ except ImportError:
70
+ ThinkingBlock = None # type: ignore[assignment,misc]
71
+ ThinkingDelta = None # type: ignore[assignment,misc]
72
+
67
73
  if TYPE_CHECKING:
68
74
  from typing import (
69
75
  Any,
@@ -85,15 +91,15 @@ if TYPE_CHECKING:
85
91
  ToolUnionParam,
86
92
  )
87
93
 
88
- from sentry_sdk._types import TextPart
94
+ from sentry_sdk._types import ReasoningPart, TextPart
89
95
 
90
- class _PatchedRawMessageStream(Stream[RawMessageStreamEvent]):
96
+ class _PatchedRawMessageStream(Stream[Any]):
91
97
  _span: Union[Span, StreamedSpan]
92
98
  _integration: "AnthropicIntegration"
93
99
 
94
100
  _model: Optional[ModelParam]
95
101
  _usage: "_RecordedUsage"
96
- _content_blocks: list[Any]
102
+ _content_blocks: "list[dict[str, Any]]"
97
103
  _response_id: Optional[str]
98
104
  _finish_reason: Optional[str]
99
105
 
@@ -103,17 +109,17 @@ if TYPE_CHECKING:
103
109
 
104
110
  _model: Optional[ModelParam]
105
111
  _usage: "_RecordedUsage"
106
- _content_blocks: list[Any]
112
+ _content_blocks: "list[dict[str, Any]]"
107
113
  _response_id: Optional[str]
108
114
  _finish_reason: Optional[str]
109
115
 
110
- class _PatchedRawAsyncMessageStream(AsyncStream[RawMessageStreamEvent]):
116
+ class _PatchedRawAsyncMessageStream(AsyncStream[Any]):
111
117
  _span: Union[Span, StreamedSpan]
112
118
  _integration: "AnthropicIntegration"
113
119
 
114
120
  _model: Optional[ModelParam]
115
121
  _usage: "_RecordedUsage"
116
- _content_blocks: list[Any]
122
+ _content_blocks: "list[dict[str, Any]]"
117
123
  _response_id: Optional[str]
118
124
  _finish_reason: Optional[str]
119
125
 
@@ -123,7 +129,7 @@ if TYPE_CHECKING:
123
129
 
124
130
  _model: Optional[ModelParam]
125
131
  _usage: "_RecordedUsage"
126
- _content_blocks: list[Any]
132
+ _content_blocks: "list[dict[str, Any]]"
127
133
  _response_id: Optional[str]
128
134
  _finish_reason: Optional[str]
129
135
 
@@ -220,6 +226,7 @@ class _StreamSpanContext:
220
226
  class AnthropicIntegration(Integration):
221
227
  identifier = "anthropic"
222
228
  origin = f"auto.ai.{identifier}"
229
+ _version: "Union[tuple[int, ...], None]" = None
223
230
 
224
231
  def __init__(self: "AnthropicIntegration", include_prompts: bool = True) -> None:
225
232
  self.include_prompts = include_prompts
@@ -228,6 +235,7 @@ class AnthropicIntegration(Integration):
228
235
  def setup_once() -> None:
229
236
  version = package_version("anthropic")
230
237
  _check_minimum_version(AnthropicIntegration, version)
238
+ AnthropicIntegration._version = version
231
239
 
232
240
  """
233
241
  client.messages.create(stream=True) can return an instance of the Stream class, which implements the iterator protocol.
@@ -272,6 +280,46 @@ class AnthropicIntegration(Integration):
272
280
  if not issubclass(AsyncMessageStream, AsyncStream):
273
281
  AsyncMessageStream.close = _wrap_async_close(AsyncMessageStream.close) # type: ignore[method-assign]
274
282
 
283
+ try:
284
+ from functools import cached_property
285
+ except ImportError:
286
+ return
287
+
288
+ # In newer anthropic SDK versions, _iterator is a cached_property instead of being eagerly assigned in __init__.
289
+ # This is good for us, since we do a global patch instead of patching _iterator on every instance.
290
+ # We also should apply a global patch to keep the cached "_iterator" lazy.
291
+ if isinstance(Stream.__dict__.get("_iterator"), cached_property):
292
+ _original_stream_iterator = Stream._iterator.func # type: ignore[attr-defined]
293
+
294
+ def _sentry_patched_stream_iterator(self: "Stream[Any]") -> "Any":
295
+ iterator = _original_stream_iterator(self)
296
+ if not hasattr(self, "_span"):
297
+ return iterator
298
+ return _wrap_synchronous_message_iterator(
299
+ cast("_PatchedRawMessageStream", self), iterator
300
+ )
301
+
302
+ patched = cached_property(_sentry_patched_stream_iterator)
303
+ patched.__set_name__(Stream, "_iterator")
304
+ Stream._iterator = patched # type: ignore[assignment,method-assign]
305
+
306
+ if isinstance(AsyncStream.__dict__.get("_iterator"), cached_property):
307
+ _original_async_stream_iterator = AsyncStream._iterator.func # type: ignore[attr-defined]
308
+
309
+ def _sentry_patched_async_stream_iterator(
310
+ self: "AsyncStream[Any]",
311
+ ) -> "Any":
312
+ iterator = _original_async_stream_iterator(self)
313
+ if not hasattr(self, "_span"):
314
+ return iterator
315
+ return _wrap_asynchronous_message_iterator(
316
+ cast("_PatchedRawAsyncMessageStream", self), iterator
317
+ )
318
+
319
+ patched = cached_property(_sentry_patched_async_stream_iterator)
320
+ patched.__set_name__(AsyncStream, "_iterator")
321
+ AsyncStream._iterator = patched # type: ignore[assignment,method-assign]
322
+
275
323
 
276
324
  def _capture_exception(exc: "Any") -> None:
277
325
  event, hint = event_from_exception(
@@ -323,22 +371,32 @@ def _collect_ai_data(
323
371
  event: "MessageStreamEvent",
324
372
  model: "str | None",
325
373
  usage: "_RecordedUsage",
326
- content_blocks: "list[str]",
374
+ content_blocks: "list[dict[str, Any]]",
327
375
  response_id: "str | None" = None,
328
376
  finish_reason: "str | None" = None,
329
- ) -> "tuple[str | None, _RecordedUsage, list[str], str | None, str | None]":
377
+ ) -> "tuple[str | None, _RecordedUsage, list[dict[str, Any]], str | None, str | None]":
330
378
  """
331
379
  Collect model information, token usage, and collect content blocks from the AI streaming response.
332
380
  """
333
381
  with capture_internal_exceptions():
334
382
  if hasattr(event, "type"):
335
383
  if event.type == "content_block_start":
336
- pass
384
+ if ThinkingBlock is not None and isinstance(
385
+ event.content_block, ThinkingBlock
386
+ ):
387
+ content_blocks.append({"type": "thinking", "thinking": ""})
388
+ elif event.content_block.type in ("text", "tool_use"):
389
+ content_blocks.append({"type": "text", "text": ""})
390
+ else:
391
+ content_blocks.append({"type": event.content_block.type})
337
392
  elif event.type == "content_block_delta":
338
- if hasattr(event.delta, "text"):
339
- content_blocks.append(event.delta.text)
393
+ block = content_blocks[event.index]
394
+ if ThinkingDelta is not None and isinstance(event.delta, ThinkingDelta):
395
+ block["thinking"] += event.delta.thinking
396
+ elif hasattr(event.delta, "text"):
397
+ block["text"] += event.delta.text
340
398
  elif hasattr(event.delta, "partial_json"):
341
- content_blocks.append(event.delta.partial_json)
399
+ block["text"] += event.delta.partial_json
342
400
  elif event.type == "content_block_stop":
343
401
  pass
344
402
 
@@ -665,7 +723,7 @@ def _set_output_data(
665
723
  output_tokens: "int | None",
666
724
  cache_read_input_tokens: "int | None",
667
725
  cache_write_input_tokens: "int | None",
668
- content_blocks: "list[Any]",
726
+ content_blocks: "list[dict[str, Any]]",
669
727
  response_id: "str | None" = None,
670
728
  finish_reason: "str | None" = None,
671
729
  ) -> None:
@@ -689,28 +747,31 @@ def _set_output_data(
689
747
  record_outputs = True
690
748
 
691
749
  if record_outputs:
692
- output_messages: "dict[str, list[Any]]" = {
693
- "response": [],
694
- "tool": [],
695
- }
750
+ parts: "list[Union[TextPart, ReasoningPart]]" = []
751
+ tool_calls = []
696
752
 
697
753
  for output in content_blocks:
698
754
  if output["type"] == "text":
699
- output_messages["response"].append(output["text"])
755
+ parts.append({"type": "text", "content": output["text"]})
756
+ elif output["type"] == "thinking":
757
+ parts.append({"type": "reasoning", "content": output["thinking"]})
700
758
  elif output["type"] == "tool_use":
701
- output_messages["tool"].append(output)
759
+ tool_calls.append(output)
702
760
 
703
- if len(output_messages["tool"]) > 0:
761
+ if len(tool_calls) > 0:
704
762
  set_data_normalized(
705
763
  span,
706
764
  SPANDATA.GEN_AI_RESPONSE_TOOL_CALLS,
707
- output_messages["tool"],
765
+ tool_calls,
708
766
  unpack=False,
709
767
  )
710
768
 
711
- if len(output_messages["response"]) > 0:
769
+ if len(parts) > 0:
712
770
  set_data_normalized(
713
- span, SPANDATA.GEN_AI_RESPONSE_TEXT, output_messages["response"]
771
+ span,
772
+ SPANDATA.GEN_AI_OUTPUT_MESSAGES,
773
+ [{"role": "assistant", "parts": parts}],
774
+ unpack=False,
714
775
  )
715
776
 
716
777
  if input_tokens is not None:
@@ -783,10 +844,19 @@ def _sentry_patched_create_sync(f: "Any", *args: "Any", **kwargs: "Any") -> "Any
783
844
  result._integration = integration # type: ignore[attr-defined]
784
845
 
785
846
  _initialize_data_accumulation_state(result)
786
- result._iterator = _wrap_synchronous_message_iterator(
787
- cast("_PatchedRawMessageStream", result),
788
- result._iterator,
789
- )
847
+ # New versions use global patch since _iterator was changed to a cached property.
848
+ if (
849
+ AnthropicIntegration._version is not None
850
+ and AnthropicIntegration._version
851
+ < (
852
+ 1,
853
+ 14,
854
+ )
855
+ ):
856
+ result._iterator = _wrap_synchronous_message_iterator( # type: ignore[misc]
857
+ cast("_PatchedRawMessageStream", result),
858
+ result._iterator,
859
+ )
790
860
 
791
861
  return result
792
862
 
@@ -881,10 +951,19 @@ async def _sentry_patched_create_async(
881
951
  result._integration = integration # type: ignore[attr-defined]
882
952
 
883
953
  _initialize_data_accumulation_state(result)
884
- result._iterator = _wrap_asynchronous_message_iterator(
885
- cast("_PatchedRawAsyncMessageStream", result),
886
- result._iterator,
887
- )
954
+ # New versions use global patch since _iterator was changed to a cached property.
955
+ if (
956
+ AnthropicIntegration._version is not None
957
+ and AnthropicIntegration._version
958
+ < (
959
+ 1,
960
+ 14,
961
+ )
962
+ ):
963
+ result._iterator = _wrap_asynchronous_message_iterator( # type: ignore[misc]
964
+ cast("_PatchedRawAsyncMessageStream", result),
965
+ result._iterator,
966
+ )
888
967
 
889
968
  return result
890
969
 
@@ -979,7 +1058,7 @@ def _set_streaming_output_data(
979
1058
  integration: "AnthropicIntegration",
980
1059
  model: "Optional[str]",
981
1060
  usage: "_RecordedUsage",
982
- content_blocks: "list[str]",
1061
+ content_blocks: "list[dict[str, Any]]",
983
1062
  response_id: "Optional[str]",
984
1063
  finish_reason: "Optional[str]",
985
1064
  ) -> None:
@@ -1002,7 +1081,7 @@ def _set_streaming_output_data(
1002
1081
  output_tokens=usage.output_tokens,
1003
1082
  cache_read_input_tokens=usage.cache_read_input_tokens,
1004
1083
  cache_write_input_tokens=usage.cache_write_input_tokens,
1005
- content_blocks=[{"text": "".join(content_blocks), "type": "text"}],
1084
+ content_blocks=content_blocks,
1006
1085
  response_id=response_id,
1007
1086
  finish_reason=finish_reason,
1008
1087
  )
@@ -1147,7 +1226,7 @@ def _wrap_message_stream_manager_enter(f: "Any") -> "Any":
1147
1226
 
1148
1227
  _initialize_data_accumulation_state(stream)
1149
1228
  stream._iterator = _wrap_synchronous_message_iterator(
1150
- stream,
1229
+ cast("_PatchedMessageStream", stream),
1151
1230
  stream._iterator,
1152
1231
  )
1153
1232
 
@@ -1260,7 +1339,7 @@ def _wrap_async_message_stream_manager_aenter(f: "Any") -> "Any":
1260
1339
 
1261
1340
  _initialize_data_accumulation_state(stream)
1262
1341
  stream._iterator = _wrap_asynchronous_message_iterator(
1263
- stream,
1342
+ cast("_PatchedAsyncMessageStream", stream),
1264
1343
  stream._iterator,
1265
1344
  )
1266
1345
 
@@ -1,7 +1,10 @@
1
1
  import sys
2
+ import time
3
+ from datetime import timedelta, timezone
2
4
 
3
5
  import sentry_sdk
4
6
  from sentry_sdk.consts import OP, SPANDATA, SPANSTATUS
7
+ from sentry_sdk.crons import monitor
5
8
  from sentry_sdk.integrations import DidNotEnable, Integration, _check_minimum_version
6
9
  from sentry_sdk.integrations.logging import ignore_logger
7
10
  from sentry_sdk.scope import should_send_default_pii
@@ -15,6 +18,8 @@ from sentry_sdk.utils import (
15
18
  ensure_integration_enabled,
16
19
  event_from_exception,
17
20
  has_data_collection_enabled,
21
+ logger,
22
+ match_regex_list,
18
23
  parse_version,
19
24
  reraise,
20
25
  )
@@ -22,6 +27,7 @@ from sentry_sdk.utils import (
22
27
  try:
23
28
  import arq.worker
24
29
  from arq.connections import ArqRedis
30
+ from arq.typing import WEEKDAYS
25
31
  from arq.version import VERSION as ARQ_VERSION
26
32
  from arq.worker import JobExecutionFailed, Retry, RetryJob, Worker
27
33
  except ImportError:
@@ -30,14 +36,14 @@ except ImportError:
30
36
  from typing import TYPE_CHECKING
31
37
 
32
38
  if TYPE_CHECKING:
33
- from typing import Any, Dict, Optional, Union
39
+ from typing import Any, Dict, List, Optional, Union
34
40
 
35
41
  from arq.cron import CronJob
36
42
  from arq.jobs import Job
37
43
  from arq.typing import WorkerCoroutine
38
44
  from arq.worker import Function
39
45
 
40
- from sentry_sdk._types import Event, EventProcessor, ExcInfo, Hint
46
+ from sentry_sdk._types import Event, EventProcessor, ExcInfo, Hint, MonitorConfig
41
47
 
42
48
  ARQ_CONTROL_FLOW_EXCEPTIONS = (JobExecutionFailed, Retry, RetryJob)
43
49
 
@@ -46,6 +52,14 @@ class ArqIntegration(Integration):
46
52
  identifier = "arq"
47
53
  origin = f"auto.queue.{identifier}"
48
54
 
55
+ def __init__(
56
+ self,
57
+ monitor_cron_jobs: bool = False,
58
+ exclude_cron_jobs: "Optional[List[str]]" = None,
59
+ ) -> None:
60
+ self.monitor_cron_jobs = monitor_cron_jobs
61
+ self.exclude_cron_jobs = exclude_cron_jobs
62
+
49
63
  @staticmethod
50
64
  def setup_once() -> None:
51
65
  try:
@@ -278,7 +292,15 @@ def patch_create_worker() -> None:
278
292
  _get_arq_cron_job(cron_job) for cron_job in kwargs.get("cron_jobs", [])
279
293
  ]
280
294
 
281
- return old_create_worker(*args, **kwargs)
295
+ worker = old_create_worker(*args, **kwargs)
296
+
297
+ integration = sentry_sdk.get_client().get_integration(ArqIntegration)
298
+ if integration is not None and integration.monitor_cron_jobs:
299
+ for cron_job in worker.cron_jobs:
300
+ with capture_internal_exceptions():
301
+ _monitor_cron_job(integration, cron_job, worker)
302
+
303
+ return worker
282
304
 
283
305
  arq.worker.create_worker = _sentry_create_worker
284
306
 
@@ -294,3 +316,115 @@ def _get_arq_cron_job(cron_job: "CronJob") -> "CronJob":
294
316
  cron_job.coroutine = _wrap_coroutine(cron_job.name, cron_job.coroutine)
295
317
 
296
318
  return cron_job
319
+
320
+
321
+ def _monitor_cron_job(
322
+ integration: "ArqIntegration", cron_job: "CronJob", worker: "Worker"
323
+ ) -> None:
324
+ # Each create_worker call wraps the coroutine again.
325
+ if getattr(cron_job, "_sentry_monitored", False):
326
+ return
327
+ cron_job._sentry_monitored = True
328
+
329
+ # arq names cron jobs "cron:<function name>" by default.
330
+ monitor_slug = cron_job.name
331
+ if monitor_slug.startswith("cron:"):
332
+ monitor_slug = monitor_slug[len("cron:") :]
333
+ if match_regex_list(monitor_slug, integration.exclude_cron_jobs):
334
+ return
335
+
336
+ monitor_config = _get_monitor_config(cron_job, worker)
337
+ if monitor_config is None:
338
+ logger.debug(
339
+ "Not monitoring arq cron job %r: its schedule can't be expressed "
340
+ "as a Sentry Crons schedule.",
341
+ cron_job.name,
342
+ )
343
+ return
344
+
345
+ coroutine = cron_job.coroutine
346
+
347
+ async def _sentry_cron_coroutine(
348
+ ctx: "Dict[Any, Any]", *args: "Any", **kwargs: "Any"
349
+ ) -> "Any":
350
+ with monitor(monitor_slug=monitor_slug, monitor_config=monitor_config):
351
+ return await coroutine(ctx, *args, **kwargs)
352
+
353
+ cron_job.coroutine = _sentry_cron_coroutine
354
+
355
+
356
+ def _get_crontab_field(value: "Any", offset: int = 0) -> "Optional[str]":
357
+ if value is None:
358
+ return "*"
359
+ if isinstance(value, int) and not isinstance(value, bool):
360
+ value = [value]
361
+ if not isinstance(value, (set, list, tuple)) or not value:
362
+ return None
363
+ if not all(isinstance(v, int) and not isinstance(v, bool) for v in value):
364
+ return None
365
+ if offset:
366
+ value = {(v + offset) % 7 for v in value}
367
+ return ",".join(str(v) for v in sorted(value))
368
+
369
+
370
+ def _get_crontab(cron_job: "CronJob") -> "Optional[str]":
371
+ # Sentry crontabs have minute resolution.
372
+ if cron_job.second not in (0, {0}, [0], (0,)):
373
+ return None
374
+
375
+ weekday = cron_job.weekday
376
+ if isinstance(weekday, str):
377
+ weekday = WEEKDAYS.index(weekday.lower())
378
+
379
+ # arq requires both to match, cron requires either.
380
+ if cron_job.day is not None and weekday is not None:
381
+ return None
382
+
383
+ fields = [
384
+ _get_crontab_field(cron_job.minute),
385
+ _get_crontab_field(cron_job.hour),
386
+ _get_crontab_field(cron_job.day),
387
+ _get_crontab_field(cron_job.month),
388
+ # arq counts weekdays from Monday = 0, cron from Sunday = 0.
389
+ _get_crontab_field(weekday, offset=1),
390
+ ]
391
+ if None in fields:
392
+ return None
393
+ return " ".join(fields) # type: ignore[arg-type]
394
+
395
+
396
+ def _get_timezone_name(worker: "Worker") -> "Optional[str]":
397
+ tz = getattr(worker, "timezone", None)
398
+ if tz is None:
399
+ # Before arq 0.25, cron jobs ran in naive local time.
400
+ if time.timezone == 0 and (not time.daylight or time.altzone == 0):
401
+ return "UTC"
402
+ return None
403
+
404
+ # zoneinfo and pytz
405
+ name = getattr(tz, "key", None) or getattr(tz, "zone", None)
406
+ if isinstance(name, str):
407
+ return name
408
+
409
+ # arq defaults to the system's fixed UTC offset at startup.
410
+ if isinstance(tz, timezone):
411
+ offset = tz.utcoffset(None)
412
+ if offset % timedelta(hours=1):
413
+ return None
414
+ hours = offset // timedelta(hours=1)
415
+ return "Etc/GMT%+d" % -hours if hours else "UTC"
416
+
417
+ return None
418
+
419
+
420
+ def _get_monitor_config(
421
+ cron_job: "CronJob", worker: "Worker"
422
+ ) -> "Optional[MonitorConfig]":
423
+ crontab = _get_crontab(cron_job)
424
+ timezone_name = _get_timezone_name(worker)
425
+ if crontab is None or timezone_name is None:
426
+ return None
427
+ return {
428
+ "schedule": {"type": "crontab", "value": crontab},
429
+ "timezone": timezone_name,
430
+ }
@@ -2,11 +2,9 @@ from typing import TYPE_CHECKING
2
2
 
3
3
  import sentry_sdk
4
4
  from sentry_sdk.crons import MonitorStatus, capture_checkin
5
+ from sentry_sdk.crons.utils import _get_interval_schedule
5
6
  from sentry_sdk.integrations import DidNotEnable
6
- from sentry_sdk.integrations.celery.utils import (
7
- _get_humanized_interval,
8
- _now_seconds_since_epoch,
9
- )
7
+ from sentry_sdk.integrations.celery.utils import _now_seconds_since_epoch
10
8
  from sentry_sdk.utils import (
11
9
  logger,
12
10
  match_regex_list,
@@ -74,19 +72,28 @@ def _get_monitor_config(
74
72
  "{0._orig_day_of_week}".format(celery_schedule)
75
73
  )
76
74
  elif isinstance(celery_schedule, schedule):
77
- schedule_type = "interval"
78
- (schedule_value, schedule_unit) = _get_humanized_interval(
79
- celery_schedule.seconds
80
- )
81
-
82
- if schedule_unit == "second":
83
- logger.warning(
84
- "Intervals shorter than one minute are not supported by Sentry Crons. Monitor '%s' has an interval of %s seconds. Use the `exclude_beat_tasks` option in the celery integration to exclude it.",
85
- monitor_name,
86
- schedule_value,
87
- )
75
+ seconds = celery_schedule.seconds
76
+ interval_schedule = _get_interval_schedule(seconds)
77
+
78
+ if interval_schedule is None:
79
+ if seconds < 60:
80
+ logger.warning(
81
+ "Intervals shorter than one minute are not supported by Sentry Crons. Monitor '%s' has an interval of %s seconds. Use the `exclude_beat_tasks` option in the celery integration to exclude it.",
82
+ monitor_name,
83
+ int(seconds),
84
+ )
85
+ else:
86
+ logger.warning(
87
+ "Sentry Crons only supports intervals of whole minutes. Monitor '%s' has an interval of %s seconds. Use the `exclude_beat_tasks` option in the celery integration to exclude it.",
88
+ monitor_name,
89
+ int(seconds),
90
+ )
88
91
  return {}
89
92
 
93
+ schedule_type = "interval"
94
+ schedule_value = interval_schedule["value"]
95
+ schedule_unit = interval_schedule["unit"]
96
+
90
97
  else:
91
98
  logger.warning(
92
99
  "Celery schedule type '%s' not supported by Sentry Crons.",
@@ -0,0 +1,10 @@
1
+ import time
2
+
3
+
4
+ def _now_seconds_since_epoch() -> float:
5
+ # We cannot use `time.perf_counter()` when dealing with the duration
6
+ # of a Celery task, because the start of a Celery task and
7
+ # the end are recorded in different processes.
8
+ # Start happens in the Celery Beat process,
9
+ # the end in a Celery Worker process.
10
+ return time.time()