sentry-sdk 2.68.0__tar.gz → 2.69.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.
- {sentry_sdk-2.68.0/sentry_sdk.egg-info → sentry_sdk-2.69.0}/PKG-INFO +2 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/pyproject.toml +6 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_batcher.py +8 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_span_batcher.py +17 -8
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_types.py +2 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/ai/_openai_completions_api.py +11 -7
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/ai/_openai_responses_api.py +41 -5
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/client.py +0 -7
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/consts.py +7 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/data_collection.py +19 -20
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/__init__.py +12 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/_wsgi_common.py +30 -21
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/aiohttp.py +50 -26
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/anthropic.py +171 -85
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/ariadne.py +10 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/asgi.py +4 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/aws_lambda.py +5 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/boto3.py +68 -19
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/bottle.py +12 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/celery/__init__.py +3 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/clickhouse_driver.py +38 -5
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/cohere.py +18 -9
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/__init__.py +100 -5
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/dramatiq.py +14 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/falcon.py +5 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/fastapi.py +63 -36
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/flask.py +12 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/gcp.py +11 -5
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/google_genai/__init__.py +6 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/google_genai/streaming.py +1 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/google_genai/utils.py +77 -37
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/httpx.py +106 -92
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/httpx2.py +107 -95
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/huggingface_hub.py +2 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/langchain.py +28 -7
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/langgraph.py +51 -49
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/litellm.py +17 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/litestar.py +9 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/logging.py +20 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/loguru.py +18 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/mcp.py +56 -74
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai.py +107 -57
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/__init__.py +22 -22
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/patches/agent_run.py +16 -12
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/patches/error_tracing.py +4 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/patches/models.py +4 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/patches/runner.py +4 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/patches/tools.py +4 -3
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/spans/ai_client.py +5 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/spans/execute_tool.py +1 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/spans/handoff.py +7 -3
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +4 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/utils.py +13 -15
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/__init__.py +13 -63
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/patches/agent_run.py +0 -16
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/spans/ai_client.py +7 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/spans/execute_tool.py +3 -3
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/spans/invoke_agent.py +4 -3
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/utils.py +30 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pyramid.py +13 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pyreqwest.py +40 -25
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/quart.py +11 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/sanic.py +8 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/sqlalchemy.py +12 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/starlette.py +89 -26
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/starlite.py +9 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/stdlib.py +185 -16
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/strawberry.py +10 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/tornado.py +24 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/wsgi.py +1 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/scope.py +4 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/tracing_utils.py +103 -30
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/transport.py +1 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/types.py +3 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/utils.py +77 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0/sentry_sdk.egg-info}/PKG-INFO +2 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk.egg-info/SOURCES.txt +2 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/setup.py +2 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/conftest.py +1 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aiohttp/test_aiohttp.py +209 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/anthropic/test_anthropic.py +6 -42
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/ariadne/test_ariadne.py +28 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/test_aws_lambda.py +6 -3
- sentry_sdk-2.69.0/tests/integrations/boto3/test_aws_http_connection.py +230 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/boto3/test_s3.py +159 -5
- sentry_sdk-2.69.0/tests/integrations/boto3/test_trace_propagation.py +216 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/bottle/test_bottle.py +166 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/clickhouse_driver/test_clickhouse_driver.py +930 -53
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/cohere/test_cohere.py +325 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/asgi/test_asgi.py +194 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/urls.py +5 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/views.py +11 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_basic.py +349 -426
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_cache_module.py +1 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_data_scrubbing.py +0 -9
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/dramatiq/test_dramatiq.py +69 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/falcon/test_falcon.py +22 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/fastapi/test_fastapi.py +115 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/flask/test_flask.py +163 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/gcp/test_gcp.py +107 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/google_genai/test_google_genai.py +12 -24
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx/test_httpx.py +869 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx2/test_httpx2.py +869 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/huggingface_hub/test_huggingface_hub.py +8 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/langchain/test_langchain.py +107 -60
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/langgraph/test_langgraph.py +546 -19
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/litellm/test_litellm.py +258 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/litestar/test_litestar.py +73 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/logging/test_logging.py +36 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/loguru/test_loguru.py +48 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/mcp/test_mcp.py +89 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/openai/test_openai.py +14 -37
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/openai_agents/test_openai_agents.py +46 -47
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pydantic_ai/test_pydantic_ai.py +506 -10
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pyramid/test_pyramid.py +158 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pyreqwest/test_pyreqwest.py +799 -3
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/quart/test_quart.py +57 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/requests/test_requests.py +0 -4
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sanic/test_sanic.py +105 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/starlette/test_starlette.py +182 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/starlite/test_starlite.py +73 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/stdlib/test_httplib.py +239 -7
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/strawberry/test_strawberry.py +44 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/tornado/test_tornado.py +147 -1
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/utils.py +32 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/profiler/test_continuous_profiler.py +23 -6
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_data_collection.py +107 -2
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_logs.py +33 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_utils.py +379 -7
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_decorator.py +100 -20
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_span_batcher.py +31 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/LICENSE +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/MANIFEST.in +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/README.md +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_compat.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_init_implementation.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_log_batcher.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_lru_cache.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_metrics_batcher.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_queue.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/_werkzeug.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/ai/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/ai/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/ai/monitoring.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/ai/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/api.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/attachments.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/crons/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/crons/api.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/crons/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/crons/decorator.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/debug.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/envelope.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/feature_flags.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/hub.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/_asgi_common.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/aiomysql.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/argv.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/arq.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/asyncio.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/asyncpg.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/atexit.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/beam.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/celery/beat.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/celery/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/chalice.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/dedupe.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/asgi.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/caching.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/middleware.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/signals_handlers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/tasks.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/templates.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/transactions.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/django/views.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/excepthook.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/executing.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/google_genai/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/gql.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/graphene.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/aio/client.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/aio/server.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/client.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/grpc/server.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/huey.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/launchdarkly.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/modules.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/patches/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/spans/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/openfeature.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/opentelemetry/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/opentelemetry/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/opentelemetry/integration.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/opentelemetry/propagator.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/otlp.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pure_eval.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/patches/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/patches/graph_nodes.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/patches/tools.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/spans/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pydantic_ai/spans/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/pymongo.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/ray.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/_async_common.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/_sync_common.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/consts.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/modules/caches.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/modules/queries.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/rb.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/redis.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/redis_cluster.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/redis/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/rq.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/rust_tracing.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/serverless.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/socket.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/spark/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/statsig.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/sys_exit.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/threading.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/trytond.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/typer.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/unleash.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/integrations/unraisablehook.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/logger.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/metrics.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/monitor.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/profiler/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/profiler/continuous_profiler.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/profiler/transaction_profiler.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/profiler/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/py.typed +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/scrubber.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/serializer.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/session.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/sessions.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/spotlight.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/traces.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/tracing.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk/worker.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk.egg-info/dependency_links.txt +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk.egg-info/entry_points.txt +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk.egg-info/not-zip-safe +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk.egg-info/requires.txt +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/sentry_sdk.egg-info/top_level.txt +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/setup.cfg +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aiohttp/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aiohttp/aiohttp_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aiohttp/aiohttp_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aiomysql/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aiomysql/test_aiomysql.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/anthropic/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/argv/test_argv.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/ariadne/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/arq/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/arq/test_arq.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asgi/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asgi/test_asgi.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asyncio/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asyncio/test_asyncio.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asyncpg/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asyncpg/asyncpg_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asyncpg/asyncpg_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/asyncpg/test_asyncpg.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions/BasicException/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions/BasicOk/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions/InitError/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions/TimeoutError/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionAllowlist/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionAllowlist/.lock +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionAllowlist/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionDenylist/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionDenylist/.lock +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionDenylist/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionOff/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionOff/.lock +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionOff/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryAllowlist/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryAllowlist/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryDenylist/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryDenylist/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryOff/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUrlQueryOff/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOff/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOff/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOn/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkDataCollectionUserInfoOn/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSendDefaultPii/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSendDefaultPii/.lock +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSendDefaultPii/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreaming/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreaming/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollection/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingDataCollection/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingPii/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingPii/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceDisabled/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceDisabled/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceEnabled/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceEnabled/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorSpanStreaming/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorSpanStreaming/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TimeoutErrorScopeModified/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TimeoutErrorScopeModified/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TracesSampler/.gitignore +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TracesSampler/index.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/aws_lambda/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/beam/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/beam/test_beam.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/boto3/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/boto3/aws_mock.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/boto3/s3_list.xml +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/bottle/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/celery/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/celery/integration_tests/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/celery/test_celery.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/celery/test_celery_beat_crons.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/celery/test_update_celery_task_headers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/chalice/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/chalice/test_chalice.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/clickhouse_driver/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/cloud_resource_context/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/cloud_resource_context/test_cloud_resource_context.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/cohere/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/conftest.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/asgi/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/asgi/image.png +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/django_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/django_helpers/views.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/asgi.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/custom_urls.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/manage.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/management/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/management/commands/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/management/commands/mycrash.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/middleware.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/routing.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/settings.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/signals.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/templates/error.html +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/templates/trace_meta.html +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/templates/user_name.html +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/myapp/wsgi.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_db_query_data.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_db_transactions.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_middleware.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_tasks.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/test_transactions.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/django/utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/dramatiq/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/excepthook/test_excepthook.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/falcon/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/fastapi/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/fastapi/photo.jpg +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/fastmcp/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/fastmcp/test_fastmcp.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/flask/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/gcp/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/google_genai/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/gql/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/gql/test_gql.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/graphene/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/graphene/test_graphene.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/compile_test_services.sh +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/grpc_test_service_pb2.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/grpc_test_service_pb2.pyi +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/grpc_test_service_pb2_grpc.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/protos/grpc_test_service.proto +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/test_grpc.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/grpc/test_grpc_aio.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx/httpx_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx/httpx_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx2/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx2/httpx2_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/httpx2/httpx2_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/huey/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/huey/test_huey.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/huggingface_hub/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/langchain/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/langgraph/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/launchdarkly/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/launchdarkly/test_launchdarkly.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/litellm/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/litestar/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/loguru/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/mcp/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/modules/test_modules.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/openai/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/openai_agents/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/openfeature/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/openfeature/test_openfeature.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/opentelemetry/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/opentelemetry/test_entry_points.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/opentelemetry/test_experimental.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/opentelemetry/test_propagator.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/opentelemetry/test_span_processor.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/otlp/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/otlp/test_otlp.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pure_eval/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pure_eval/test_pure_eval.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pydantic_ai/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pymongo/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pymongo/test_pymongo.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pyramid/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pyreqwest/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pyreqwest/pyreqwest_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/pyreqwest/pyreqwest_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/quart/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/ray/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/ray/test_ray.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/asyncio/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/asyncio/test_redis_asyncio.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/cluster/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/cluster/test_redis_cluster.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/cluster_asyncio/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/cluster_asyncio/test_redis_cluster_asyncio.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/test_redis.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/test_redis_cache_module.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis/test_redis_cache_module_async.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis_py_cluster_legacy/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/redis_py_cluster_legacy/test_redis_py_cluster_legacy.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/requests/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/rq/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/rq/test_rq.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/rust_tracing/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/rust_tracing/test_rust_tracing.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sanic/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/serverless/test_serverless.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/socket/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/socket/test_socket.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/spark/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/spark/test_spark.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sqlalchemy/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sqlalchemy/sqlalchemy_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sqlalchemy/sqlalchemy_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sqlalchemy/test_sqlalchemy.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/starlette/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/starlette/photo.jpg +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/starlette/templates/trace_meta.html +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/starlite/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/statsig/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/statsig/test_statsig.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/stdlib/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/stdlib/httplib_helpers/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/stdlib/httplib_helpers/helpers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/stdlib/test_subprocess.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/strawberry/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/sys_exit/test_sys_exit.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/test_gnu_backtrace.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/threading/test_threading.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/tornado/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/trytond/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/trytond/test_trytond.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/typer/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/typer/test_typer.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/unleash/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/unleash/test_unleash.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/unleash/testutils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/unraisablehook/test_unraisablehook.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/integrations/wsgi/test_wsgi.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/new_scopes_compat/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/new_scopes_compat/conftest.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/new_scopes_compat/test_new_scopes_compat.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/new_scopes_compat/test_new_scopes_compat_event.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/profiler/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/profiler/test_transaction_profiler.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test.key +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test.pem +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_ai_integration_deactivation.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_ai_monitoring.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_api.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_attributes.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_basics.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_client.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_conftest.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_crons.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_dsc.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_envelope.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_exceptiongroup.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_feature_flags.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_full_stack_frames.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_gevent.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_import.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_lru_cache.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_metrics.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_monitor.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_propagationcontext.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_scope.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_scrubber.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_serializer.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_sessions.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_shadowed_module.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_spotlight.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_tracing_utils.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_transport.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/test_types.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_baggage.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_conversation_id.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_deprecated.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_http_headers.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_ignore_status_codes.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_integration_tests.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_misc.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_noop_span.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_propagation.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_sample_rand.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_sample_rand_propagation.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_sampling.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_span_name.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_span_origin.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/tracing/test_span_streaming.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/utils/__init__.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/utils/test_contextvars.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.0}/tests/utils/test_general.py +0 -0
- {sentry_sdk-2.68.0 → sentry_sdk-2.69.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.
|
|
3
|
+
Version: 2.69.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
|
|
@@ -23,6 +23,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.12
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.13
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.14
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
26
27
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
27
28
|
Requires-Python: >=3.6
|
|
28
29
|
Description-Content-Type: text/markdown
|
|
@@ -74,6 +74,12 @@ typing = [
|
|
|
74
74
|
"pydantic-ai-slim>=2.23.0",
|
|
75
75
|
"langchain-core>=1.5.3",
|
|
76
76
|
"huggingface-hub>=1.26.1",
|
|
77
|
+
"anthropic>=1.2.0",
|
|
78
|
+
"google-genai>=2.21.0",
|
|
79
|
+
"openai>=3.7.0",
|
|
80
|
+
"tiktoken>=0.14.0",
|
|
81
|
+
"aiohttp>=3.14.3",
|
|
82
|
+
"openai-agents>=0.22.0",
|
|
77
83
|
]
|
|
78
84
|
test = [
|
|
79
85
|
"dataclasses ; python_full_version < '3.7'",
|
|
@@ -6,7 +6,7 @@ from datetime import datetime, timezone
|
|
|
6
6
|
from typing import TYPE_CHECKING, Generic, TypeVar
|
|
7
7
|
|
|
8
8
|
from sentry_sdk.envelope import Envelope, Item, PayloadRef
|
|
9
|
-
from sentry_sdk.utils import format_timestamp
|
|
9
|
+
from sentry_sdk.utils import capture_internal_exceptions, format_timestamp
|
|
10
10
|
|
|
11
11
|
if TYPE_CHECKING:
|
|
12
12
|
from typing import Any, Callable, Optional
|
|
@@ -100,7 +100,13 @@ class Batcher(Generic[T]):
|
|
|
100
100
|
while self._running:
|
|
101
101
|
self._flush_event.wait(self.FLUSH_WAIT_TIME + random.random())
|
|
102
102
|
self._flush_event.clear()
|
|
103
|
-
|
|
103
|
+
# A failure to serialize or send one batch must not kill the
|
|
104
|
+
# flusher thread. If it did, the buffer would keep filling with
|
|
105
|
+
# nothing draining it, and every later log or metric would be
|
|
106
|
+
# dropped for the rest of the process lifetime. Swallow and log
|
|
107
|
+
# the error instead so the loop keeps running.
|
|
108
|
+
with capture_internal_exceptions():
|
|
109
|
+
self._flush()
|
|
104
110
|
|
|
105
111
|
def add(self, item: "T") -> None:
|
|
106
112
|
# Bail out if the current thread is already executing batcher code.
|
|
@@ -9,7 +9,11 @@ from typing import TYPE_CHECKING
|
|
|
9
9
|
|
|
10
10
|
from sentry_sdk._batcher import Batcher
|
|
11
11
|
from sentry_sdk.envelope import Envelope, Item, PayloadRef
|
|
12
|
-
from sentry_sdk.utils import
|
|
12
|
+
from sentry_sdk.utils import (
|
|
13
|
+
capture_internal_exceptions,
|
|
14
|
+
format_timestamp,
|
|
15
|
+
serialize_attribute,
|
|
16
|
+
)
|
|
13
17
|
|
|
14
18
|
if TYPE_CHECKING:
|
|
15
19
|
from typing import Any, Callable, Optional
|
|
@@ -91,14 +95,19 @@ class SpanBatcher(Batcher["SpanJSON"]):
|
|
|
91
95
|
self._flush_event.wait(timeout=self.FLUSH_WAIT_TIME + jitter)
|
|
92
96
|
self._flush_event.clear()
|
|
93
97
|
|
|
94
|
-
|
|
98
|
+
# A failure in one flush must not kill the flusher thread, or the
|
|
99
|
+
# span buffer would keep filling with nothing draining it and every
|
|
100
|
+
# later span would be dropped for the rest of the process lifetime.
|
|
101
|
+
# Swallow and log the error instead so the loop keeps running.
|
|
102
|
+
with capture_internal_exceptions():
|
|
103
|
+
self._flush(only_pending=True)
|
|
95
104
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
if (
|
|
106
|
+
time.monotonic() - self._last_full_flush
|
|
107
|
+
>= self.FLUSH_WAIT_TIME + jitter
|
|
108
|
+
):
|
|
109
|
+
self._flush()
|
|
110
|
+
self._last_full_flush = time.monotonic()
|
|
102
111
|
|
|
103
112
|
def add(self, span: "SpanJSON") -> None:
|
|
104
113
|
# Bail out if the current thread is already executing batcher code.
|
|
@@ -188,7 +188,7 @@ if TYPE_CHECKING:
|
|
|
188
188
|
gen_ai: "GenAICollectionUserOptions"
|
|
189
189
|
database_query_data: bool
|
|
190
190
|
queues: bool
|
|
191
|
-
stack_frame_variables: bool
|
|
191
|
+
stack_frame_variables: "Union[bool, KeyValueCollectionBehaviour]"
|
|
192
192
|
frame_context_lines: int
|
|
193
193
|
|
|
194
194
|
class DataCollection(TypedDict):
|
|
@@ -202,7 +202,7 @@ if TYPE_CHECKING:
|
|
|
202
202
|
gen_ai: "GenAICollectionBehaviour"
|
|
203
203
|
database_query_data: bool
|
|
204
204
|
queues: bool
|
|
205
|
-
stack_frame_variables: bool
|
|
205
|
+
stack_frame_variables: "Union[bool, KeyValueCollectionBehaviour]"
|
|
206
206
|
frame_context_lines: int
|
|
207
207
|
|
|
208
208
|
# "critical" is an alias of "fatal" recognized by Relay
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from collections.abc import Iterable
|
|
2
|
-
from typing import TYPE_CHECKING
|
|
2
|
+
from typing import TYPE_CHECKING, cast
|
|
3
3
|
|
|
4
4
|
if TYPE_CHECKING:
|
|
5
|
-
from typing import Union
|
|
5
|
+
from typing import TypeGuard, Union
|
|
6
6
|
|
|
7
7
|
from openai.types.chat import (
|
|
8
8
|
ChatCompletionContentPartParam,
|
|
9
|
+
ChatCompletionContentPartRefusalParam,
|
|
10
|
+
ChatCompletionContentPartTextParam,
|
|
9
11
|
ChatCompletionMessageParam,
|
|
10
12
|
ChatCompletionSystemMessageParam,
|
|
11
13
|
ChatCompletionToolUnionParam,
|
|
@@ -14,13 +16,15 @@ if TYPE_CHECKING:
|
|
|
14
16
|
from sentry_sdk._types import TextPart, ToolDefinition
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
def _is_system_instruction(
|
|
19
|
+
def _is_system_instruction(
|
|
20
|
+
message: "ChatCompletionMessageParam",
|
|
21
|
+
) -> "TypeGuard[ChatCompletionSystemMessageParam]":
|
|
18
22
|
return isinstance(message, dict) and message.get("role") == "system"
|
|
19
23
|
|
|
20
24
|
|
|
21
25
|
def _get_system_instructions(
|
|
22
26
|
messages: "Iterable[ChatCompletionMessageParam]",
|
|
23
|
-
) -> "list[
|
|
27
|
+
) -> "list[ChatCompletionSystemMessageParam]":
|
|
24
28
|
if not isinstance(messages, Iterable):
|
|
25
29
|
return []
|
|
26
30
|
|
|
@@ -28,7 +32,7 @@ def _get_system_instructions(
|
|
|
28
32
|
|
|
29
33
|
|
|
30
34
|
def _get_text_items(
|
|
31
|
-
content: "Union[str, Iterable[ChatCompletionContentPartParam]]",
|
|
35
|
+
content: "Union[str, Iterable[Union[ChatCompletionContentPartParam, ChatCompletionContentPartTextParam, ChatCompletionContentPartRefusalParam]]]",
|
|
32
36
|
) -> "list[str]":
|
|
33
37
|
if isinstance(content, str):
|
|
34
38
|
return [content]
|
|
@@ -36,10 +40,10 @@ def _get_text_items(
|
|
|
36
40
|
if not isinstance(content, Iterable):
|
|
37
41
|
return []
|
|
38
42
|
|
|
39
|
-
text_items = []
|
|
43
|
+
text_items: "list[str]" = []
|
|
40
44
|
for part in content:
|
|
41
45
|
if isinstance(part, dict) and part.get("type") == "text":
|
|
42
|
-
text = part.get("text", None)
|
|
46
|
+
text = cast("ChatCompletionContentPartTextParam", part).get("text", None)
|
|
43
47
|
if text is not None:
|
|
44
48
|
text_items.append(text)
|
|
45
49
|
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
from typing import TYPE_CHECKING, Iterable
|
|
1
|
+
from typing import TYPE_CHECKING, Iterable, cast
|
|
2
2
|
|
|
3
3
|
if TYPE_CHECKING:
|
|
4
|
-
from typing import Iterable, Union
|
|
4
|
+
from typing import Iterable, TypeGuard, Union
|
|
5
5
|
|
|
6
6
|
from openai.types.responses import (
|
|
7
7
|
ResponseInputItemParam,
|
|
8
8
|
ResponseInputParam,
|
|
9
|
+
ResponseInputTextParam,
|
|
9
10
|
ToolParam,
|
|
10
11
|
)
|
|
12
|
+
from openai.types.responses.easy_input_message_param import EasyInputMessageParam
|
|
13
|
+
from openai.types.responses.response_input_item_param import Message
|
|
11
14
|
|
|
12
|
-
from sentry_sdk._types import ToolDefinition
|
|
15
|
+
from sentry_sdk._types import TextPart, ToolDefinition
|
|
13
16
|
|
|
14
17
|
|
|
15
|
-
def _is_system_instruction(
|
|
18
|
+
def _is_system_instruction(
|
|
19
|
+
message: "ResponseInputItemParam",
|
|
20
|
+
) -> "TypeGuard[Union[EasyInputMessageParam, Message]]":
|
|
16
21
|
if not isinstance(message, dict) or not message.get("role") == "system":
|
|
17
22
|
return False
|
|
18
23
|
|
|
@@ -21,13 +26,44 @@ def _is_system_instruction(message: "ResponseInputItemParam") -> bool:
|
|
|
21
26
|
|
|
22
27
|
def _get_system_instructions(
|
|
23
28
|
messages: "Union[str, ResponseInputParam]",
|
|
24
|
-
) -> "list[
|
|
29
|
+
) -> "list[Union[EasyInputMessageParam, Message]]":
|
|
25
30
|
if not isinstance(messages, list):
|
|
26
31
|
return []
|
|
27
32
|
|
|
28
33
|
return [message for message in messages if _is_system_instruction(message)]
|
|
29
34
|
|
|
30
35
|
|
|
36
|
+
def _transform_system_instructions(
|
|
37
|
+
system_instructions: "list[Union[EasyInputMessageParam, Message]]",
|
|
38
|
+
) -> "list[TextPart]":
|
|
39
|
+
instruction_text_parts: "list[TextPart]" = []
|
|
40
|
+
|
|
41
|
+
for instruction in system_instructions:
|
|
42
|
+
if not isinstance(instruction, dict):
|
|
43
|
+
continue
|
|
44
|
+
|
|
45
|
+
content = instruction.get("content")
|
|
46
|
+
if content is None:
|
|
47
|
+
continue
|
|
48
|
+
|
|
49
|
+
if isinstance(content, str):
|
|
50
|
+
instruction_text_parts.append({"type": "text", "content": content})
|
|
51
|
+
continue
|
|
52
|
+
|
|
53
|
+
if not isinstance(content, Iterable):
|
|
54
|
+
continue
|
|
55
|
+
|
|
56
|
+
for part in content:
|
|
57
|
+
if not isinstance(part, dict) or part.get("type") != "input_text":
|
|
58
|
+
continue
|
|
59
|
+
|
|
60
|
+
text = cast("ResponseInputTextParam", part).get("text", None)
|
|
61
|
+
if text is not None:
|
|
62
|
+
instruction_text_parts.append({"type": "text", "content": text})
|
|
63
|
+
|
|
64
|
+
return instruction_text_parts
|
|
65
|
+
|
|
66
|
+
|
|
31
67
|
def _transform_tool_definitions(tools: "Iterable[ToolParam]") -> "list[ToolDefinition]":
|
|
32
68
|
"""
|
|
33
69
|
Transform tool definitions to the schema used by the "gen_ai.tool.definitions" attribute.
|
|
@@ -648,13 +648,6 @@ class _Client(BaseClient):
|
|
|
648
648
|
|
|
649
649
|
self.session_flusher = SessionFlusher(capture_func=_capture_envelope)
|
|
650
650
|
|
|
651
|
-
if self.options.get("enable_logs", False) or self.options[
|
|
652
|
-
"_experiments"
|
|
653
|
-
].get("enable_logs", False):
|
|
654
|
-
logger.warning(
|
|
655
|
-
"The enable_logs option has no effect and will be removed in the next major."
|
|
656
|
-
)
|
|
657
|
-
|
|
658
651
|
self.log_batcher = LogBatcher(
|
|
659
652
|
capture_func=_capture_envelope,
|
|
660
653
|
record_lost_func=_record_lost_event,
|
|
@@ -878,6 +878,12 @@ class SPANDATA:
|
|
|
878
878
|
Example: GET
|
|
879
879
|
"""
|
|
880
880
|
|
|
881
|
+
HTTP_ROUTE = "http.route"
|
|
882
|
+
"""
|
|
883
|
+
The matched route, that is, the path template used to match the request.
|
|
884
|
+
Example: /users/{id}
|
|
885
|
+
"""
|
|
886
|
+
|
|
881
887
|
HTTP_QUERY = "http.query"
|
|
882
888
|
"""
|
|
883
889
|
The Query string present in the URL.
|
|
@@ -1840,4 +1846,4 @@ DEFAULT_OPTIONS = _get_default_options()
|
|
|
1840
1846
|
del _get_default_options
|
|
1841
1847
|
|
|
1842
1848
|
|
|
1843
|
-
VERSION = "2.
|
|
1849
|
+
VERSION = "2.69.0"
|
|
@@ -23,14 +23,12 @@ Resolution precedence (see :func:`_resolve_data_collection`):
|
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
25
|
import warnings
|
|
26
|
-
from typing import TYPE_CHECKING, List, Mapping, Optional, Union, cast
|
|
26
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Union, cast
|
|
27
27
|
from urllib.parse import parse_qs, urlencode
|
|
28
28
|
|
|
29
29
|
from sentry_sdk._types import SENSITIVE_DATA_SUBSTITUTE
|
|
30
30
|
|
|
31
31
|
if TYPE_CHECKING:
|
|
32
|
-
from typing import Any, Dict
|
|
33
|
-
|
|
34
32
|
from sentry_sdk._types import (
|
|
35
33
|
DataCollection,
|
|
36
34
|
GenAICollectionBehaviour,
|
|
@@ -41,11 +39,12 @@ if TYPE_CHECKING:
|
|
|
41
39
|
|
|
42
40
|
# ``http_bodies`` defaults to this (collect everything the
|
|
43
41
|
# platform supports); an empty list is the explicit opt-out.
|
|
44
|
-
#
|
|
45
|
-
# currently capture
|
|
42
|
+
# ``incoming_response`` is not included here because we don't
|
|
43
|
+
# currently capture incoming response bodies.
|
|
46
44
|
_ALL_HTTP_BODY_TYPES = [
|
|
47
45
|
"incoming_request",
|
|
48
46
|
"outgoing_request",
|
|
47
|
+
"outgoing_response",
|
|
49
48
|
]
|
|
50
49
|
|
|
51
50
|
# Default number of source lines captured above and below a stack frame.
|
|
@@ -190,29 +189,31 @@ def _map_from_send_default_pii(
|
|
|
190
189
|
|
|
191
190
|
def _resolve_explicit(
|
|
192
191
|
d: "dict[str, Any]",
|
|
193
|
-
include_local_variables: bool,
|
|
194
|
-
include_source_context: bool,
|
|
195
192
|
) -> "DataCollection":
|
|
196
193
|
"""
|
|
197
194
|
Build a fully-resolved ``DataCollection`` from a user-supplied
|
|
198
195
|
``data_collection`` dict, filling in spec defaults for any omitted or
|
|
199
|
-
partially-specified field.
|
|
200
|
-
``include_local_variables`` / ``include_source_context`` options when unset.
|
|
196
|
+
partially-specified field.
|
|
201
197
|
"""
|
|
202
|
-
# frame_context_lines accepts an integer or a boolean fallback (spec: True
|
|
203
|
-
# -> platform default of 5, False -> 0). bool is a subclass of int, so
|
|
204
|
-
# coerce explicitly before treating it as a line count.
|
|
205
198
|
frame_context_lines = d.get("frame_context_lines")
|
|
206
199
|
if frame_context_lines is None:
|
|
207
|
-
frame_context_lines =
|
|
208
|
-
_DEFAULT_FRAME_CONTEXT_LINES if include_source_context else 0
|
|
209
|
-
)
|
|
200
|
+
frame_context_lines = _DEFAULT_FRAME_CONTEXT_LINES
|
|
210
201
|
elif isinstance(frame_context_lines, bool):
|
|
211
202
|
frame_context_lines = _DEFAULT_FRAME_CONTEXT_LINES if frame_context_lines else 0
|
|
203
|
+
else:
|
|
204
|
+
if not isinstance(frame_context_lines, int) or frame_context_lines < 0:
|
|
205
|
+
raise ValueError(
|
|
206
|
+
"Invalid `frame_context_lines` value: Must be 0 or greater."
|
|
207
|
+
)
|
|
212
208
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
209
|
+
raw_stack_frame_variables = d.get("stack_frame_variables", True)
|
|
210
|
+
stack_frame_variables: "Union[bool, KeyValueCollectionBehaviour]"
|
|
211
|
+
|
|
212
|
+
stack_frame_variables = (
|
|
213
|
+
_kvcb_from_value(raw_stack_frame_variables)
|
|
214
|
+
if isinstance(raw_stack_frame_variables, dict)
|
|
215
|
+
else bool(raw_stack_frame_variables)
|
|
216
|
+
)
|
|
216
217
|
|
|
217
218
|
# http_bodies: omitted means "all valid types"; [] is the explicit opt-out.
|
|
218
219
|
http_bodies = d.get("http_bodies")
|
|
@@ -323,8 +324,6 @@ def _resolve_data_collection(options: "Dict[str, Any]") -> "DataCollection":
|
|
|
323
324
|
)
|
|
324
325
|
return _resolve_explicit(
|
|
325
326
|
user_dc,
|
|
326
|
-
include_local_variables,
|
|
327
|
-
include_source_context,
|
|
328
327
|
)
|
|
329
328
|
|
|
330
329
|
return _map_from_send_default_pii(
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
+
from itertools import zip_longest
|
|
2
3
|
from threading import Lock
|
|
3
4
|
from typing import TYPE_CHECKING
|
|
4
5
|
|
|
@@ -299,10 +300,17 @@ def _check_minimum_version(
|
|
|
299
300
|
if min_version is None:
|
|
300
301
|
return
|
|
301
302
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
303
|
+
# We can't use normal tuple comparison here because the version tuples might
|
|
304
|
+
# not have the same length, in which case they wouldn't compare as expected.
|
|
305
|
+
for v, min in zip_longest(version, min_version, fillvalue=0):
|
|
306
|
+
if v == min:
|
|
307
|
+
continue
|
|
308
|
+
elif v < min:
|
|
309
|
+
raise DidNotEnable(
|
|
310
|
+
f"Integration only supports {package} {'.'.join(map(str, min_version))} or newer."
|
|
311
|
+
)
|
|
312
|
+
elif v > min:
|
|
313
|
+
return
|
|
306
314
|
|
|
307
315
|
|
|
308
316
|
class DidNotEnable(Exception): # noqa: N818
|
|
@@ -89,6 +89,10 @@ class RequestExtractor:
|
|
|
89
89
|
content_length = self.content_length()
|
|
90
90
|
request_info = event.get("request", {})
|
|
91
91
|
|
|
92
|
+
# Prior to data collection being implemented we unconditionally attached
|
|
93
|
+
# the request body, which is why we default to True here.
|
|
94
|
+
attach_request_body = True
|
|
95
|
+
|
|
92
96
|
if has_data_collection_enabled(client.options):
|
|
93
97
|
cookies = _apply_key_value_collection_filtering(
|
|
94
98
|
items=dict(self.cookies()),
|
|
@@ -96,31 +100,36 @@ class RequestExtractor:
|
|
|
96
100
|
)
|
|
97
101
|
if cookies:
|
|
98
102
|
request_info["cookies"] = cookies
|
|
103
|
+
|
|
104
|
+
attach_request_body = (
|
|
105
|
+
"incoming_request" in client.options["data_collection"]["http_bodies"]
|
|
106
|
+
)
|
|
99
107
|
elif should_send_default_pii():
|
|
100
108
|
request_info["cookies"] = dict(self.cookies())
|
|
101
109
|
|
|
102
|
-
if
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
# First read the raw body data
|
|
106
|
-
# It is important to read this first because if it is Django
|
|
107
|
-
# it will cache the body and then we can read the cached version
|
|
108
|
-
# again in parsed_body() (or json() or wherever).
|
|
109
|
-
raw_data = None
|
|
110
|
-
try:
|
|
111
|
-
raw_data = self.raw_data()
|
|
112
|
-
except _RAW_DATA_EXCEPTIONS:
|
|
113
|
-
# If DjangoRestFramework is used it already read the body for us
|
|
114
|
-
# so reading it here will fail. We can ignore this.
|
|
115
|
-
pass
|
|
116
|
-
|
|
117
|
-
parsed_body = self.parsed_body()
|
|
118
|
-
if parsed_body is not None:
|
|
119
|
-
data = parsed_body
|
|
120
|
-
elif raw_data:
|
|
121
|
-
data = AnnotatedValue.removed_because_raw_data()
|
|
110
|
+
if attach_request_body:
|
|
111
|
+
if not request_body_within_bounds(client, content_length):
|
|
112
|
+
data = AnnotatedValue.removed_because_over_size_limit()
|
|
122
113
|
else:
|
|
123
|
-
|
|
114
|
+
# First read the raw body data
|
|
115
|
+
# It is important to read this first because if it is Django
|
|
116
|
+
# it will cache the body and then we can read the cached version
|
|
117
|
+
# again in parsed_body() (or json() or wherever).
|
|
118
|
+
raw_data = None
|
|
119
|
+
try:
|
|
120
|
+
raw_data = self.raw_data()
|
|
121
|
+
except _RAW_DATA_EXCEPTIONS:
|
|
122
|
+
# If DjangoRestFramework is used it already read the body for us
|
|
123
|
+
# so reading it here will fail. We can ignore this.
|
|
124
|
+
pass
|
|
125
|
+
|
|
126
|
+
parsed_body = self.parsed_body()
|
|
127
|
+
if parsed_body is not None:
|
|
128
|
+
data = parsed_body
|
|
129
|
+
elif raw_data:
|
|
130
|
+
data = AnnotatedValue.removed_because_raw_data()
|
|
131
|
+
else:
|
|
132
|
+
data = None
|
|
124
133
|
|
|
125
134
|
if data is not None:
|
|
126
135
|
request_info["data"] = data
|
|
@@ -21,9 +21,6 @@ from sentry_sdk.integrations._wsgi_common import (
|
|
|
21
21
|
from sentry_sdk.integrations.logging import ignore_logger
|
|
22
22
|
from sentry_sdk.scope import Scope, should_send_default_pii
|
|
23
23
|
from sentry_sdk.sessions import track_session
|
|
24
|
-
from sentry_sdk.traces import (
|
|
25
|
-
SOURCE_FOR_STYLE as SEGMENT_SOURCE_FOR_STYLE,
|
|
26
|
-
)
|
|
27
24
|
from sentry_sdk.traces import (
|
|
28
25
|
NoOpStreamedSpan,
|
|
29
26
|
SegmentNameSource,
|
|
@@ -236,6 +233,7 @@ class AioHttpIntegration(Integration):
|
|
|
236
233
|
},
|
|
237
234
|
parent_span=None,
|
|
238
235
|
)
|
|
236
|
+
scope.get_current_scope()._server_segment_span = span_ctx
|
|
239
237
|
else:
|
|
240
238
|
transaction = continue_trace(
|
|
241
239
|
headers,
|
|
@@ -312,7 +310,7 @@ class AioHttpIntegration(Integration):
|
|
|
312
310
|
|
|
313
311
|
return response
|
|
314
312
|
|
|
315
|
-
Application._handle = sentry_app_handle
|
|
313
|
+
Application._handle = sentry_app_handle # type: ignore[method-assign]
|
|
316
314
|
|
|
317
315
|
old_urldispatcher_resolve = UrlDispatcher.resolve
|
|
318
316
|
|
|
@@ -326,38 +324,33 @@ class AioHttpIntegration(Integration):
|
|
|
326
324
|
if integration is None:
|
|
327
325
|
return rv
|
|
328
326
|
|
|
327
|
+
route_info = rv.get_info()
|
|
328
|
+
pattern = route_info.get("path") or route_info.get("formatter")
|
|
329
|
+
|
|
330
|
+
server_span = sentry_sdk.get_current_scope()._server_segment_span
|
|
331
|
+
if server_span is not None and pattern is not None:
|
|
332
|
+
server_span.set_attribute(SPANDATA.HTTP_ROUTE, pattern)
|
|
333
|
+
|
|
329
334
|
name = None
|
|
330
335
|
|
|
331
336
|
try:
|
|
332
337
|
if integration.transaction_style == "handler_name":
|
|
333
338
|
name = transaction_from_function(rv.handler)
|
|
334
339
|
elif integration.transaction_style == "method_and_path_pattern":
|
|
335
|
-
route_info = rv.get_info()
|
|
336
|
-
pattern = route_info.get("path") or route_info.get("formatter")
|
|
337
340
|
name = "{} {}".format(request.method, pattern)
|
|
338
341
|
except Exception:
|
|
339
342
|
pass
|
|
340
343
|
|
|
341
344
|
if name is not None:
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
current_span._segment.set_attribute(
|
|
348
|
-
"sentry.segment.name.source",
|
|
349
|
-
SEGMENT_SOURCE_FOR_STYLE[integration.transaction_style].value,
|
|
350
|
-
)
|
|
351
|
-
else:
|
|
352
|
-
current_scope = sentry_sdk.get_current_scope()
|
|
353
|
-
current_scope.set_transaction_name(
|
|
354
|
-
name,
|
|
355
|
-
source=SOURCE_FOR_STYLE[integration.transaction_style],
|
|
356
|
-
)
|
|
345
|
+
current_scope = sentry_sdk.get_current_scope()
|
|
346
|
+
current_scope.set_transaction_name(
|
|
347
|
+
name,
|
|
348
|
+
source=SOURCE_FOR_STYLE[integration.transaction_style],
|
|
349
|
+
)
|
|
357
350
|
|
|
358
351
|
return rv
|
|
359
352
|
|
|
360
|
-
UrlDispatcher.resolve = sentry_urldispatcher_resolve
|
|
353
|
+
UrlDispatcher.resolve = sentry_urldispatcher_resolve # type: ignore[method-assign]
|
|
361
354
|
|
|
362
355
|
old_client_session_init = ClientSession.__init__
|
|
363
356
|
|
|
@@ -370,7 +363,7 @@ class AioHttpIntegration(Integration):
|
|
|
370
363
|
kwargs["trace_configs"] = client_trace_configs
|
|
371
364
|
return old_client_session_init(*args, **kwargs)
|
|
372
365
|
|
|
373
|
-
ClientSession.__init__ = init
|
|
366
|
+
ClientSession.__init__ = init # type: ignore[method-assign]
|
|
374
367
|
|
|
375
368
|
|
|
376
369
|
def create_trace_config() -> "TraceConfig":
|
|
@@ -554,6 +547,7 @@ def _make_request_processor(
|
|
|
554
547
|
if request is None:
|
|
555
548
|
return event
|
|
556
549
|
|
|
550
|
+
client_options = sentry_sdk.get_client().options
|
|
557
551
|
with capture_internal_exceptions():
|
|
558
552
|
request_info = event.setdefault("request", {})
|
|
559
553
|
|
|
@@ -563,15 +557,45 @@ def _make_request_processor(
|
|
|
563
557
|
request.path,
|
|
564
558
|
)
|
|
565
559
|
|
|
566
|
-
|
|
560
|
+
if has_data_collection_enabled(client_options):
|
|
561
|
+
if request.query_string:
|
|
562
|
+
filtered_query_string = (
|
|
563
|
+
_apply_data_collection_filtering_to_query_string(
|
|
564
|
+
query_string=request.query_string,
|
|
565
|
+
behaviour=client_options["data_collection"][
|
|
566
|
+
"url_query_params"
|
|
567
|
+
],
|
|
568
|
+
)
|
|
569
|
+
)
|
|
570
|
+
if filtered_query_string:
|
|
571
|
+
request_info["query_string"] = filtered_query_string
|
|
572
|
+
else:
|
|
573
|
+
request_info["query_string"] = request.query_string
|
|
574
|
+
|
|
567
575
|
request_info["method"] = request.method
|
|
568
|
-
|
|
576
|
+
|
|
577
|
+
# REMOTE_ADDR was unconditionally set pre-data collection, so it
|
|
578
|
+
# continues to be set when data collection is not enabled.
|
|
579
|
+
if (
|
|
580
|
+
not has_data_collection_enabled(client_options)
|
|
581
|
+
or client_options["data_collection"]["user_info"]
|
|
582
|
+
):
|
|
583
|
+
request_info["env"] = {"REMOTE_ADDR": request.remote}
|
|
569
584
|
request_info["headers"] = _filter_headers(dict(request.headers))
|
|
570
585
|
|
|
571
586
|
# Just attach raw data here if it is within bounds, if available.
|
|
572
587
|
# Unfortunately there's no way to get structured data from aiohttp
|
|
573
588
|
# without awaiting on some coroutine.
|
|
574
|
-
|
|
589
|
+
if has_data_collection_enabled(client_options):
|
|
590
|
+
if (
|
|
591
|
+
"incoming_request"
|
|
592
|
+
in client_options["data_collection"]["http_bodies"]
|
|
593
|
+
):
|
|
594
|
+
request_info["data"] = get_aiohttp_request_data(request)
|
|
595
|
+
else:
|
|
596
|
+
# We never gated this prior to data collection, so it should be attached
|
|
597
|
+
# when data collection is not enabled.
|
|
598
|
+
request_info["data"] = get_aiohttp_request_data(request)
|
|
575
599
|
|
|
576
600
|
return event
|
|
577
601
|
|