sentry-sdk 2.63.0__tar.gz → 2.65.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.63.0/sentry_sdk.egg-info → sentry_sdk-2.65.0}/PKG-INFO +6 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/README.md +5 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/pyproject.toml +9 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_types.py +54 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/client.py +29 -3
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/consts.py +37 -3
- sentry_sdk-2.65.0/sentry_sdk/data_collection.py +261 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/_asgi_common.py +42 -5
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/aiohttp.py +15 -9
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/arq.py +8 -2
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/asgi.py +42 -6
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/asyncpg.py +14 -2
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/boto3.py +2 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/clickhouse_driver.py +1 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/middleware.py +32 -7
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/dramatiq.py +5 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/executing.py +2 -2
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/httpx.py +3 -2
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/httpx2.py +3 -2
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/huey.py +5 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/langchain.py +11 -4
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/langgraph.py +5 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/litellm.py +18 -15
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/mcp.py +274 -74
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/spans/ai_client.py +7 -4
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/spans/invoke_agent.py +7 -4
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pymongo.py +1 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pyramid.py +9 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pyreqwest.py +2 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/_async_common.py +16 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/_sync_common.py +16 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/rq.py +8 -5
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/sanic.py +5 -3
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/starlette.py +39 -25
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/starlite.py +1 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/stdlib.py +6 -5
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/tornado.py +5 -3
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/wsgi.py +10 -6
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/scope.py +47 -9
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/traces.py +35 -16
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/tracing.py +1 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/tracing_utils.py +47 -17
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/utils.py +27 -24
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0/sentry_sdk.egg-info}/PKG-INFO +6 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk.egg-info/SOURCES.txt +3 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/setup.py +1 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/conftest.py +118 -77
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aiohttp/test_aiohttp.py +45 -17
- sentry_sdk-2.65.0/tests/integrations/aiomysql/test_aiomysql.py +1154 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/anthropic/test_anthropic.py +6 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/arq/test_arq.py +9 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asgi/test_asgi.py +1 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asyncpg/test_asyncpg.py +138 -108
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/boto3/test_s3.py +30 -20
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/clickhouse_driver/test_clickhouse_driver.py +20 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/asgi/test_asgi.py +47 -0
- sentry_sdk-2.65.0/tests/integrations/django/myapp/middleware.py +81 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/dramatiq/test_dramatiq.py +9 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/fastapi/test_fastapi.py +46 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/google_genai/test_google_genai.py +4 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx/test_httpx.py +21 -7
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx2/test_httpx2.py +37 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/huey/test_huey.py +12 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/huggingface_hub/test_huggingface_hub.py +14 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/langchain/test_langchain.py +3 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/langgraph/test_langgraph.py +28 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/litellm/test_litellm.py +1 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/logging/test_logging.py +3 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/loguru/test_loguru.py +3 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/mcp/test_mcp.py +738 -136
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/openai/test_openai.py +37 -74
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/openai_agents/test_openai_agents.py +27 -1
- sentry_sdk-2.65.0/tests/integrations/opentelemetry/test_entry_points.py +26 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pymongo/test_pymongo.py +4 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pyramid/test_pyramid.py +45 -1
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pyreqwest/test_pyreqwest.py +39 -6
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/quart/test_quart.py +2 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/ray/test_ray.py +21 -5
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/test_redis.py +31 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/test_redis_cache_module.py +15 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/test_redis_cache_module_async.py +4 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/requests/test_requests.py +2 -2
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/rq/test_rq.py +5 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/rust_tracing/test_rust_tracing.py +22 -33
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sanic/test_sanic.py +15 -3
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/starlette/test_starlette.py +91 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/stdlib/test_httplib.py +53 -23
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/tornado/test_tornado.py +17 -4
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/wsgi/test_wsgi.py +19 -4
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/profiler/test_transaction_profiler.py +1 -1
- sentry_sdk-2.65.0/tests/test_data_collection.py +334 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_gevent.py +6 -8
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_logs.py +16 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_metrics.py +8 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_scope.py +37 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_transport.py +2 -4
- sentry_sdk-2.65.0/tests/tracing/test_conversation_id.py +185 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_decorator.py +273 -3
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_http_headers.py +21 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_misc.py +80 -187
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_propagation.py +19 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_sample_rand_propagation.py +36 -0
- sentry_sdk-2.65.0/tests/tracing/test_sampling.py +683 -0
- sentry_sdk-2.65.0/tests/tracing/test_span_origin.py +76 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_span_streaming.py +246 -256
- sentry_sdk-2.63.0/tests/integrations/aiomysql/test_aiomysql.py +0 -801
- sentry_sdk-2.63.0/tests/integrations/django/myapp/middleware.py +0 -31
- sentry_sdk-2.63.0/tests/integrations/opentelemetry/test_entry_points.py +0 -18
- sentry_sdk-2.63.0/tests/tracing/test_sampling.py +0 -324
- sentry_sdk-2.63.0/tests/tracing/test_span_origin.py +0 -38
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/LICENSE +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/MANIFEST.in +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_batcher.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_compat.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_init_implementation.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_log_batcher.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_lru_cache.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_metrics_batcher.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_queue.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_span_batcher.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/_werkzeug.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/ai/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/ai/_openai_completions_api.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/ai/_openai_responses_api.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/ai/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/ai/monitoring.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/ai/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/api.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/attachments.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/crons/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/crons/api.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/crons/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/crons/decorator.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/debug.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/envelope.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/feature_flags.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/hub.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/_wsgi_common.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/aiomysql.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/anthropic.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/argv.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/ariadne.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/asyncio.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/atexit.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/aws_lambda.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/beam.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/bottle.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/celery/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/celery/beat.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/celery/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/chalice.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/cohere.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/dedupe.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/asgi.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/caching.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/signals_handlers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/tasks.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/templates.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/transactions.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/django/views.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/excepthook.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/falcon.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/fastapi.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/flask.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/gcp.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/google_genai/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/google_genai/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/google_genai/streaming.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/google_genai/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/gql.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/graphene.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/aio/client.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/aio/server.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/client.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/grpc/server.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/huggingface_hub.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/launchdarkly.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/litestar.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/logging.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/loguru.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/modules.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/patches/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/patches/agent_run.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/patches/error_tracing.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/patches/models.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/patches/runner.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/patches/tools.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/spans/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/spans/ai_client.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/spans/execute_tool.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/spans/handoff.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openai_agents/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/openfeature.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/opentelemetry/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/opentelemetry/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/opentelemetry/integration.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/opentelemetry/propagator.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/otlp.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pure_eval.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/patches/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/patches/agent_run.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/patches/graph_nodes.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/patches/tools.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/spans/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/spans/execute_tool.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/spans/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/pydantic_ai/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/quart.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/ray.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/consts.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/modules/caches.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/modules/queries.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/rb.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/redis.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/redis_cluster.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/redis/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/rust_tracing.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/serverless.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/socket.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/spark/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/sqlalchemy.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/statsig.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/strawberry.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/sys_exit.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/threading.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/trytond.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/typer.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/unleash.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/integrations/unraisablehook.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/logger.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/metrics.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/monitor.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/profiler/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/profiler/continuous_profiler.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/profiler/transaction_profiler.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/profiler/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/py.typed +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/scrubber.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/serializer.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/session.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/sessions.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/spotlight.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/transport.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/types.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk/worker.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk.egg-info/dependency_links.txt +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk.egg-info/entry_points.txt +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk.egg-info/not-zip-safe +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk.egg-info/requires.txt +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/sentry_sdk.egg-info/top_level.txt +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/setup.cfg +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aiohttp/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aiohttp/aiohttp_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aiohttp/aiohttp_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aiomysql/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/anthropic/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/argv/test_argv.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/ariadne/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/ariadne/test_ariadne.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/arq/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asgi/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asyncio/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asyncio/test_asyncio.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asyncpg/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asyncpg/asyncpg_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/asyncpg/asyncpg_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions/BasicException/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions/BasicOk/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions/InitError/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions/TimeoutError/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreaming/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreaming/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingPii/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/BasicOkSpanStreamingPii/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceDisabled/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceDisabled/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceEnabled/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorPerformanceEnabled/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorSpanStreaming/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/RaiseErrorSpanStreaming/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TimeoutErrorScopeModified/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TimeoutErrorScopeModified/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TracesSampler/.gitignore +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/lambda_functions_with_embedded_sdk/TracesSampler/index.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/test_aws_lambda.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/aws_lambda/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/beam/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/beam/test_beam.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/boto3/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/boto3/aws_mock.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/boto3/s3_list.xml +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/bottle/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/bottle/test_bottle.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/celery/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/celery/integration_tests/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/celery/integration_tests/test_celery_beat_cron_monitoring.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/celery/test_celery.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/celery/test_celery_beat_crons.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/celery/test_update_celery_task_headers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/chalice/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/chalice/test_chalice.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/clickhouse_driver/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/cloud_resource_context/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/cloud_resource_context/test_cloud_resource_context.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/cohere/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/cohere/test_cohere.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/conftest.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/asgi/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/asgi/image.png +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/django_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/django_helpers/views.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/asgi.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/custom_urls.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/manage.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/management/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/management/commands/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/management/commands/mycrash.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/routing.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/settings.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/signals.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/templates/error.html +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/templates/trace_meta.html +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/templates/user_name.html +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/urls.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/views.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/myapp/wsgi.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_basic.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_cache_module.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_data_scrubbing.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_db_query_data.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_db_transactions.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_middleware.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_tasks.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/test_transactions.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/django/utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/dramatiq/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/excepthook/test_excepthook.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/falcon/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/falcon/test_falcon.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/fastapi/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/fastapi/photo.jpg +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/fastmcp/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/fastmcp/test_fastmcp.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/flask/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/flask/test_flask.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/gcp/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/gcp/test_gcp.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/google_genai/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/gql/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/gql/test_gql.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/graphene/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/graphene/test_graphene.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/compile_test_services.sh +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/grpc_test_service_pb2.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/grpc_test_service_pb2.pyi +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/grpc_test_service_pb2_grpc.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/protos/grpc_test_service.proto +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/test_grpc.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/grpc/test_grpc_aio.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx/httpx_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx/httpx_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx2/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx2/httpx2_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/httpx2/httpx2_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/huey/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/huggingface_hub/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/langchain/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/langgraph/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/launchdarkly/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/launchdarkly/test_launchdarkly.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/litellm/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/litestar/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/litestar/test_litestar.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/loguru/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/mcp/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/modules/test_modules.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/openai/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/openai_agents/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/openfeature/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/openfeature/test_openfeature.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/opentelemetry/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/opentelemetry/test_experimental.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/opentelemetry/test_propagator.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/opentelemetry/test_span_processor.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/otlp/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/otlp/test_otlp.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pure_eval/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pure_eval/test_pure_eval.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pydantic_ai/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pydantic_ai/test_pydantic_ai.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pymongo/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pyramid/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pyreqwest/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pyreqwest/pyreqwest_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/pyreqwest/pyreqwest_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/quart/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/ray/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/asyncio/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/asyncio/test_redis_asyncio.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/cluster/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/cluster/test_redis_cluster.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/cluster_asyncio/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis/cluster_asyncio/test_redis_cluster_asyncio.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis_py_cluster_legacy/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/redis_py_cluster_legacy/test_redis_py_cluster_legacy.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/requests/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/rq/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/rust_tracing/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sanic/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/serverless/test_serverless.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/socket/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/socket/test_socket.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/spark/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/spark/test_spark.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sqlalchemy/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sqlalchemy/sqlalchemy_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sqlalchemy/sqlalchemy_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sqlalchemy/test_sqlalchemy.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/starlette/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/starlette/photo.jpg +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/starlette/templates/trace_meta.html +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/starlite/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/starlite/test_starlite.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/statsig/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/statsig/test_statsig.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/stdlib/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/stdlib/httplib_helpers/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/stdlib/httplib_helpers/helpers.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/stdlib/test_subprocess.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/strawberry/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/strawberry/test_strawberry.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/sys_exit/test_sys_exit.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/test_gnu_backtrace.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/threading/test_threading.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/tornado/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/trytond/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/trytond/test_trytond.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/typer/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/typer/test_typer.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/unleash/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/unleash/test_unleash.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/unleash/testutils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/integrations/unraisablehook/test_unraisablehook.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/new_scopes_compat/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/new_scopes_compat/conftest.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/new_scopes_compat/test_new_scopes_compat.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/new_scopes_compat/test_new_scopes_compat_event.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/profiler/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/profiler/test_continuous_profiler.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test.key +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test.pem +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_ai_integration_deactivation.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_ai_monitoring.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_api.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_attributes.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_basics.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_client.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_conftest.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_crons.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_dsc.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_envelope.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_exceptiongroup.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_feature_flags.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_full_stack_frames.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_import.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_lru_cache.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_monitor.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_propagationcontext.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_scrubber.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_serializer.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_sessions.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_shadowed_module.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_spotlight.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_tracing_utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_types.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/test_utils.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_baggage.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_deprecated.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_ignore_status_codes.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_integration_tests.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_noop_span.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_sample_rand.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_span_batcher.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/tracing/test_span_name.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/utils/__init__.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/utils/test_contextvars.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.0}/tests/utils/test_general.py +0 -0
- {sentry_sdk-2.63.0 → sentry_sdk-2.65.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.65.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
|
|
@@ -193,6 +193,11 @@ sentry_sdk.init(
|
|
|
193
193
|
# Set traces_sample_rate to 1.0 to capture 100%
|
|
194
194
|
# of traces for performance monitoring.
|
|
195
195
|
traces_sample_rate=1.0,
|
|
196
|
+
|
|
197
|
+
# To disable sending user data and HTTP request/response bodies, uncomment
|
|
198
|
+
# the line below. For more info visit:
|
|
199
|
+
# https://docs.sentry.io/platforms/python/configuration/options/#data_collection
|
|
200
|
+
# data_collection={"user_info": False, "http_bodies": []},
|
|
196
201
|
)
|
|
197
202
|
```
|
|
198
203
|
|
|
@@ -49,6 +49,11 @@ sentry_sdk.init(
|
|
|
49
49
|
# Set traces_sample_rate to 1.0 to capture 100%
|
|
50
50
|
# of traces for performance monitoring.
|
|
51
51
|
traces_sample_rate=1.0,
|
|
52
|
+
|
|
53
|
+
# To disable sending user data and HTTP request/response bodies, uncomment
|
|
54
|
+
# the line below. For more info visit:
|
|
55
|
+
# https://docs.sentry.io/platforms/python/configuration/options/#data_collection
|
|
56
|
+
# data_collection={"user_info": False, "http_bodies": []},
|
|
52
57
|
)
|
|
53
58
|
```
|
|
54
59
|
|
|
@@ -67,6 +67,15 @@ typing = [
|
|
|
67
67
|
"httpx2",
|
|
68
68
|
"botocore-stubs",
|
|
69
69
|
"werkzeug",
|
|
70
|
+
"mcp>=2.0.0b1",
|
|
71
|
+
"starlette>=1.3.1",
|
|
72
|
+
"python-multipart>=0.0.32",
|
|
73
|
+
"pydantic>=2.13.4",
|
|
74
|
+
]
|
|
75
|
+
test = [
|
|
76
|
+
"dataclasses ; python_full_version < '3.7'",
|
|
77
|
+
"pytest>=6.0.0",
|
|
78
|
+
"pytest-cov",
|
|
70
79
|
]
|
|
71
80
|
|
|
72
81
|
#
|
|
@@ -141,7 +141,7 @@ if TYPE_CHECKING:
|
|
|
141
141
|
from collections.abc import Container, MutableMapping, Sequence
|
|
142
142
|
from datetime import datetime
|
|
143
143
|
from types import TracebackType
|
|
144
|
-
from typing import Any, Callable, Dict, Mapping, NotRequired, Optional, Type
|
|
144
|
+
from typing import Any, Callable, Dict, List, Mapping, NotRequired, Optional, Type
|
|
145
145
|
|
|
146
146
|
from typing_extensions import Literal, TypedDict
|
|
147
147
|
|
|
@@ -152,6 +152,59 @@ if TYPE_CHECKING:
|
|
|
152
152
|
version: str
|
|
153
153
|
packages: "Sequence[Mapping[str, str]]"
|
|
154
154
|
|
|
155
|
+
class KeyValueCollectionBehaviour(TypedDict):
|
|
156
|
+
mode: 'Literal["off", "denylist", "allowlist"]'
|
|
157
|
+
terms: "NotRequired[List[str]]"
|
|
158
|
+
|
|
159
|
+
class GenAICollectionUserOptions(TypedDict, total=False):
|
|
160
|
+
inputs: bool
|
|
161
|
+
outputs: bool
|
|
162
|
+
|
|
163
|
+
class GenAICollectionBehaviour(TypedDict):
|
|
164
|
+
inputs: bool
|
|
165
|
+
outputs: bool
|
|
166
|
+
|
|
167
|
+
class GraphQLCollectionUserOptions(TypedDict, total=False):
|
|
168
|
+
document: bool
|
|
169
|
+
variables: bool
|
|
170
|
+
|
|
171
|
+
class GraphQLCollectionBehaviour(TypedDict):
|
|
172
|
+
document: bool
|
|
173
|
+
variables: bool
|
|
174
|
+
|
|
175
|
+
class HttpHeadersCollectionUserOptions(TypedDict, total=False):
|
|
176
|
+
request: "KeyValueCollectionBehaviour"
|
|
177
|
+
|
|
178
|
+
class HttpHeadersCollectionBehaviour(TypedDict):
|
|
179
|
+
request: "KeyValueCollectionBehaviour"
|
|
180
|
+
|
|
181
|
+
class DataCollectionUserOptions(TypedDict, total=False):
|
|
182
|
+
user_info: bool
|
|
183
|
+
cookies: "KeyValueCollectionBehaviour"
|
|
184
|
+
http_headers: "HttpHeadersCollectionUserOptions"
|
|
185
|
+
http_bodies: "List[str]"
|
|
186
|
+
query_params: "KeyValueCollectionBehaviour"
|
|
187
|
+
graphql: "GraphQLCollectionUserOptions"
|
|
188
|
+
gen_ai: "GenAICollectionUserOptions"
|
|
189
|
+
database_query_data: bool
|
|
190
|
+
queues: bool
|
|
191
|
+
stack_frame_variables: bool
|
|
192
|
+
frame_context_lines: int
|
|
193
|
+
|
|
194
|
+
class DataCollection(TypedDict):
|
|
195
|
+
provided_by_user: bool
|
|
196
|
+
user_info: bool
|
|
197
|
+
cookies: "KeyValueCollectionBehaviour"
|
|
198
|
+
http_headers: "HttpHeadersCollectionBehaviour"
|
|
199
|
+
http_bodies: "List[str]"
|
|
200
|
+
query_params: "KeyValueCollectionBehaviour"
|
|
201
|
+
graphql: "GraphQLCollectionBehaviour"
|
|
202
|
+
gen_ai: "GenAICollectionBehaviour"
|
|
203
|
+
database_query_data: bool
|
|
204
|
+
queues: bool
|
|
205
|
+
stack_frame_variables: bool
|
|
206
|
+
frame_context_lines: int
|
|
207
|
+
|
|
155
208
|
# "critical" is an alias of "fatal" recognized by Relay
|
|
156
209
|
LogLevelStr = Literal["fatal", "critical", "error", "warning", "info", "debug"]
|
|
157
210
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import os
|
|
3
|
+
import platform
|
|
3
4
|
import random
|
|
4
5
|
import socket
|
|
6
|
+
import sys
|
|
5
7
|
import uuid
|
|
6
8
|
import warnings
|
|
7
9
|
from collections.abc import Iterable, Mapping
|
|
@@ -21,6 +23,10 @@ from sentry_sdk.consts import (
|
|
|
21
23
|
VERSION,
|
|
22
24
|
ClientConstructor,
|
|
23
25
|
)
|
|
26
|
+
from sentry_sdk.data_collection import (
|
|
27
|
+
_map_from_send_default_pii,
|
|
28
|
+
_resolve_data_collection,
|
|
29
|
+
)
|
|
24
30
|
from sentry_sdk.envelope import Envelope, Item, PayloadRef
|
|
25
31
|
from sentry_sdk.integrations import _DEFAULT_INTEGRATIONS, setup_integrations
|
|
26
32
|
from sentry_sdk.integrations.dedupe import DedupeIntegration
|
|
@@ -241,6 +247,11 @@ def _serialized_v1_span_to_serialized_v2_span(
|
|
|
241
247
|
if "version" in sdk_info:
|
|
242
248
|
attributes["sentry.sdk.version"] = sdk_info["version"]
|
|
243
249
|
|
|
250
|
+
attributes["process.runtime.name"] = platform.python_implementation()
|
|
251
|
+
attributes["process.runtime.version"] = (
|
|
252
|
+
f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
|
|
253
|
+
)
|
|
254
|
+
|
|
244
255
|
if not attributes:
|
|
245
256
|
return res
|
|
246
257
|
|
|
@@ -338,11 +349,13 @@ def _get_options(*args: "Optional[str]", **kwargs: "Any") -> "Dict[str, Any]":
|
|
|
338
349
|
if rv["enable_tracing"] is True and rv["traces_sample_rate"] is None:
|
|
339
350
|
rv["traces_sample_rate"] = 1.0
|
|
340
351
|
|
|
352
|
+
rv["data_collection"] = _resolve_data_collection(rv)
|
|
353
|
+
|
|
341
354
|
if rv["event_scrubber"] is None:
|
|
342
355
|
rv["event_scrubber"] = EventScrubber(
|
|
343
|
-
send_default_pii=
|
|
344
|
-
|
|
345
|
-
|
|
356
|
+
send_default_pii=False
|
|
357
|
+
if rv["send_default_pii"] is None
|
|
358
|
+
else rv["send_default_pii"]
|
|
346
359
|
)
|
|
347
360
|
|
|
348
361
|
if rv["socket_options"] and not isinstance(rv["socket_options"], list):
|
|
@@ -607,6 +620,19 @@ class _Client(BaseClient):
|
|
|
607
620
|
self.options["error_sampler"] = sample_all
|
|
608
621
|
self.options["traces_sampler"] = sample_all
|
|
609
622
|
self.options["profiles_sampler"] = sample_all
|
|
623
|
+
# data_collection was resolved in _get_options() before this
|
|
624
|
+
# spotlight override flipped send_default_pii on. Re-derive it so
|
|
625
|
+
# data_collection agrees with should_send_default_pii() in
|
|
626
|
+
# DSN-less spotlight mode (only when the user did not set
|
|
627
|
+
# data_collection explicitly).
|
|
628
|
+
if not self.options["data_collection"]["provided_by_user"]:
|
|
629
|
+
self.options["data_collection"] = _map_from_send_default_pii(
|
|
630
|
+
send_default_pii=True,
|
|
631
|
+
include_local_variables=self.options["include_local_variables"]
|
|
632
|
+
is not False,
|
|
633
|
+
include_source_context=self.options["include_source_context"]
|
|
634
|
+
is not False,
|
|
635
|
+
)
|
|
610
636
|
|
|
611
637
|
self.session_flusher = SessionFlusher(capture_func=_capture_envelope)
|
|
612
638
|
|
|
@@ -45,6 +45,7 @@ if TYPE_CHECKING:
|
|
|
45
45
|
from sentry_sdk._types import (
|
|
46
46
|
BreadcrumbProcessor,
|
|
47
47
|
ContinuousProfilerMode,
|
|
48
|
+
DataCollectionUserOptions,
|
|
48
49
|
Event,
|
|
49
50
|
EventProcessor,
|
|
50
51
|
Hint,
|
|
@@ -86,6 +87,7 @@ if TYPE_CHECKING:
|
|
|
86
87
|
Callable[[SpanJSON, Hint], Optional[SpanJSON]]
|
|
87
88
|
],
|
|
88
89
|
"suppress_asgi_chained_exceptions": Optional[bool],
|
|
90
|
+
"data_collection": Optional[DataCollectionUserOptions],
|
|
89
91
|
},
|
|
90
92
|
total=False,
|
|
91
93
|
)
|
|
@@ -518,6 +520,12 @@ class SPANDATA:
|
|
|
518
520
|
Example: postgresql
|
|
519
521
|
"""
|
|
520
522
|
|
|
523
|
+
DB_QUERY_TEXT = "db.query.text"
|
|
524
|
+
"""
|
|
525
|
+
The database query being executed.
|
|
526
|
+
Example: "SELECT * FROM users WHERE id = $1"
|
|
527
|
+
"""
|
|
528
|
+
|
|
521
529
|
DB_SYSTEM_NAME = "db.system.name"
|
|
522
530
|
"""
|
|
523
531
|
An identifier for the database management system (DBMS) product being used. See OpenTelemetry's list of well-known DBMS identifiers.
|
|
@@ -1014,6 +1022,12 @@ class SPANDATA:
|
|
|
1014
1022
|
Example: "details"
|
|
1015
1023
|
"""
|
|
1016
1024
|
|
|
1025
|
+
URL_PATH = "url.path"
|
|
1026
|
+
"""
|
|
1027
|
+
The URI path component.
|
|
1028
|
+
Example: "/foo"
|
|
1029
|
+
"""
|
|
1030
|
+
|
|
1017
1031
|
URL_QUERY = "url.query"
|
|
1018
1032
|
"""
|
|
1019
1033
|
The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does.
|
|
@@ -1180,6 +1194,8 @@ class OP:
|
|
|
1180
1194
|
COHERE_CHAT_COMPLETIONS_CREATE = "ai.chat_completions.create.cohere"
|
|
1181
1195
|
COHERE_EMBEDDINGS_CREATE = "ai.embeddings.create.cohere"
|
|
1182
1196
|
DB = "db"
|
|
1197
|
+
DB_CURSOR_ITERATOR = "db.cursor.iter"
|
|
1198
|
+
DB_CURSOR_FETCH = "db.cursor.fetch"
|
|
1183
1199
|
DB_REDIS = "db.redis"
|
|
1184
1200
|
EVENT_DJANGO = "event.django"
|
|
1185
1201
|
FUNCTION = "function"
|
|
@@ -1320,7 +1336,7 @@ class ClientConstructor:
|
|
|
1320
1336
|
before_send_metric: "Optional[Callable[[Metric, Hint], Optional[Metric]]]" = None,
|
|
1321
1337
|
org_id: "Optional[str]" = None,
|
|
1322
1338
|
strict_trace_continuation: bool = False,
|
|
1323
|
-
stream_gen_ai_spans: bool =
|
|
1339
|
+
stream_gen_ai_spans: bool = True,
|
|
1324
1340
|
) -> None:
|
|
1325
1341
|
"""Initialize the Sentry SDK with the given parameters. All parameters described here can be used in a call to `sentry_sdk.init()`.
|
|
1326
1342
|
|
|
@@ -1741,7 +1757,25 @@ class ClientConstructor:
|
|
|
1741
1757
|
:param stream_gen_ai_spans: When set, generative AI spans are sent in a new transport format to
|
|
1742
1758
|
reduce downstream data loss.
|
|
1743
1759
|
|
|
1744
|
-
:param _experiments:
|
|
1760
|
+
:param _experiments: Dictionary of experimental, opt-in features that are not yet stable.
|
|
1761
|
+
|
|
1762
|
+
``data_collection`` (EXPERIMENTAL): structured configuration controlling what data integrations
|
|
1763
|
+
collect automatically, superseding `send_default_pii`. Passing a dict under
|
|
1764
|
+
`_experiments={"data_collection": {...}}` opts into the feature; omitted fields use their
|
|
1765
|
+
defaults (most categories are collected, with the sensitive denylist scrubbing values).
|
|
1766
|
+
When it is not set, the SDK derives behaviour from `send_default_pii` so that upgrading
|
|
1767
|
+
changes nothing. Restrict collection per category (user identity, cookies, HTTP
|
|
1768
|
+
headers/bodies, query params, generative AI inputs/outputs, stack frame variables, source
|
|
1769
|
+
context). If `send_default_pii` is also set, `data_collection` takes precedence.
|
|
1770
|
+
|
|
1771
|
+
Example::
|
|
1772
|
+
|
|
1773
|
+
sentry_sdk.init(
|
|
1774
|
+
dsn="...",
|
|
1775
|
+
_experiments={"data_collection": {"user_info": False, "http_bodies": []}},
|
|
1776
|
+
)
|
|
1777
|
+
|
|
1778
|
+
See https://docs.sentry.io/platforms/python/configuration/options/#data_collection for more details.
|
|
1745
1779
|
"""
|
|
1746
1780
|
pass
|
|
1747
1781
|
|
|
@@ -1765,4 +1799,4 @@ DEFAULT_OPTIONS = _get_default_options()
|
|
|
1765
1799
|
del _get_default_options
|
|
1766
1800
|
|
|
1767
1801
|
|
|
1768
|
-
VERSION = "2.
|
|
1802
|
+
VERSION = "2.65.0"
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Data Collection configuration.
|
|
3
|
+
|
|
4
|
+
Implements the ``data_collection`` client option described in the Sentry SDK
|
|
5
|
+
"Data Collection" spec
|
|
6
|
+
(https://develop.sentry.dev/sdk/foundations/client/data-collection/).
|
|
7
|
+
|
|
8
|
+
``data_collection`` supersedes the single ``send_default_pii`` boolean with a
|
|
9
|
+
structured configuration that lets users enable or restrict automatically
|
|
10
|
+
collected data by category (user identity, cookies, HTTP headers, query params,
|
|
11
|
+
HTTP bodies, generative AI inputs/outputs, stack frame variables, source
|
|
12
|
+
context).
|
|
13
|
+
|
|
14
|
+
Resolution precedence (see :func:`_resolve_data_collection`):
|
|
15
|
+
|
|
16
|
+
* ``data_collection`` set, ``send_default_pii`` unset -> honour ``data_collection``
|
|
17
|
+
using the spec defaults for any omitted field.
|
|
18
|
+
* ``send_default_pii`` set, ``data_collection`` unset -> derive a
|
|
19
|
+
resolved ``DataCollection`` that mirrors what ``send_default_pii`` collects today.
|
|
20
|
+
* neither set -> treated as ``send_default_pii=False``.
|
|
21
|
+
* both set -> ``data_collection`` wins (it is the single source of truth); a
|
|
22
|
+
``DeprecationWarning`` is emitted for ``send_default_pii``.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import warnings
|
|
26
|
+
from typing import TYPE_CHECKING, cast
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from typing import Any, Dict, Literal
|
|
30
|
+
|
|
31
|
+
from sentry_sdk._types import (
|
|
32
|
+
DataCollection,
|
|
33
|
+
GenAICollectionBehaviour,
|
|
34
|
+
GraphQLCollectionBehaviour,
|
|
35
|
+
HttpHeadersCollectionBehaviour,
|
|
36
|
+
KeyValueCollectionBehaviour,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# ``http_bodies`` defaults to this (collect everything the
|
|
40
|
+
# platform supports); an empty list is the explicit opt-out.
|
|
41
|
+
# response bodyies are not included here because we don't
|
|
42
|
+
# currently capture them (as of Jul 7 2026)
|
|
43
|
+
_ALL_HTTP_BODY_TYPES = [
|
|
44
|
+
"incoming_request",
|
|
45
|
+
"outgoing_request",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
# Default number of source lines captured above and below a stack frame.
|
|
49
|
+
_DEFAULT_FRAME_CONTEXT_LINES = 5
|
|
50
|
+
|
|
51
|
+
# Collection modes for key-value data (cookies, headers, query params).
|
|
52
|
+
# snake_case (Python-only deviation from the spec's camelCase); never
|
|
53
|
+
# serialized to Sentry.
|
|
54
|
+
_VALID_KEY_VALUE_COLLECTION_BEHAVIOUR_MODES = ("off", "denylist", "allowlist")
|
|
55
|
+
|
|
56
|
+
# Values of keys that contain any of
|
|
57
|
+
# these terms (partial, case-insensitive) are always replaced with
|
|
58
|
+
# ``"[Filtered]"`` regardless of the configured collection mode.
|
|
59
|
+
_SENSITIVE_DENYLIST = [
|
|
60
|
+
"auth",
|
|
61
|
+
"token",
|
|
62
|
+
"secret",
|
|
63
|
+
"password",
|
|
64
|
+
"passwd",
|
|
65
|
+
"pwd",
|
|
66
|
+
"key",
|
|
67
|
+
"jwt",
|
|
68
|
+
"bearer",
|
|
69
|
+
"sso",
|
|
70
|
+
"saml",
|
|
71
|
+
"csrf",
|
|
72
|
+
"xsrf",
|
|
73
|
+
"credentials",
|
|
74
|
+
"session",
|
|
75
|
+
"sid",
|
|
76
|
+
"identity",
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _map_from_send_default_pii(
|
|
81
|
+
*,
|
|
82
|
+
send_default_pii: bool,
|
|
83
|
+
include_local_variables: bool,
|
|
84
|
+
include_source_context: bool,
|
|
85
|
+
) -> "DataCollection":
|
|
86
|
+
"""
|
|
87
|
+
Build a fully-resolved ``DataCollection`` dict that mirrors the data
|
|
88
|
+
``send_default_pii`` collects today. Used when ``data_collection`` is not
|
|
89
|
+
provided explicitly.
|
|
90
|
+
"""
|
|
91
|
+
kv_mode: "Literal['denylist', 'off']" = "denylist" if send_default_pii else "off"
|
|
92
|
+
terms = [] if send_default_pii else ["forwarded", "-ip", "remote-", "via", "-user"]
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
"provided_by_user": False,
|
|
96
|
+
"user_info": send_default_pii,
|
|
97
|
+
"cookies": {"mode": kv_mode, "terms": terms},
|
|
98
|
+
# Headers are collected in both PII modes today (sensitive ones filtered
|
|
99
|
+
# when PII is off), so this never maps to "off".
|
|
100
|
+
"http_headers": {
|
|
101
|
+
"request": {"mode": "denylist", "terms": terms},
|
|
102
|
+
},
|
|
103
|
+
# Bodies are collected regardless of PII today, bounded by
|
|
104
|
+
# ``max_request_body_size``.
|
|
105
|
+
"http_bodies": list(_ALL_HTTP_BODY_TYPES),
|
|
106
|
+
"query_params": {"mode": kv_mode, "terms": terms},
|
|
107
|
+
"graphql": {"document": send_default_pii, "variables": send_default_pii},
|
|
108
|
+
"gen_ai": {"inputs": send_default_pii, "outputs": send_default_pii},
|
|
109
|
+
"database_query_data": send_default_pii,
|
|
110
|
+
"queues": send_default_pii,
|
|
111
|
+
"stack_frame_variables": include_local_variables,
|
|
112
|
+
"frame_context_lines": (
|
|
113
|
+
_DEFAULT_FRAME_CONTEXT_LINES if include_source_context else 0
|
|
114
|
+
),
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _resolve_explicit(
|
|
119
|
+
d: "dict[str, Any]",
|
|
120
|
+
include_local_variables: bool,
|
|
121
|
+
include_source_context: bool,
|
|
122
|
+
) -> "DataCollection":
|
|
123
|
+
"""
|
|
124
|
+
Build a fully-resolved ``DataCollection`` from a user-supplied
|
|
125
|
+
``data_collection`` dict, filling in spec defaults for any omitted or
|
|
126
|
+
partially-specified field. Frame fields fall back to the legacy
|
|
127
|
+
``include_local_variables`` / ``include_source_context`` options when unset.
|
|
128
|
+
"""
|
|
129
|
+
# frame_context_lines accepts an integer or a boolean fallback (spec: True
|
|
130
|
+
# -> platform default of 5, False -> 0). bool is a subclass of int, so
|
|
131
|
+
# coerce explicitly before treating it as a line count.
|
|
132
|
+
frame_context_lines = d.get("frame_context_lines")
|
|
133
|
+
if frame_context_lines is None:
|
|
134
|
+
frame_context_lines = (
|
|
135
|
+
_DEFAULT_FRAME_CONTEXT_LINES if include_source_context else 0
|
|
136
|
+
)
|
|
137
|
+
elif isinstance(frame_context_lines, bool):
|
|
138
|
+
frame_context_lines = _DEFAULT_FRAME_CONTEXT_LINES if frame_context_lines else 0
|
|
139
|
+
|
|
140
|
+
stack_frame_variables = d.get("stack_frame_variables")
|
|
141
|
+
if stack_frame_variables is None:
|
|
142
|
+
stack_frame_variables = include_local_variables
|
|
143
|
+
|
|
144
|
+
# http_bodies: omitted means "all valid types"; [] is the explicit opt-out.
|
|
145
|
+
http_bodies = d.get("http_bodies")
|
|
146
|
+
http_bodies = (
|
|
147
|
+
list(http_bodies) if http_bodies is not None else list(_ALL_HTTP_BODY_TYPES)
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
"provided_by_user": True,
|
|
152
|
+
"user_info": d.get("user_info", True),
|
|
153
|
+
"cookies": _kvcb_from_value(d.get("cookies") or {}),
|
|
154
|
+
"http_headers": _http_headers_from_value(d.get("http_headers") or {}),
|
|
155
|
+
"http_bodies": http_bodies,
|
|
156
|
+
"query_params": _kvcb_from_value(d.get("query_params") or {}),
|
|
157
|
+
"graphql": _graphql_from_value(d.get("graphql") or {}),
|
|
158
|
+
"gen_ai": _gen_ai_from_value(d.get("gen_ai") or {}),
|
|
159
|
+
"database_query_data": d.get("database_query_data", True),
|
|
160
|
+
"queues": d.get("queues", True),
|
|
161
|
+
"stack_frame_variables": stack_frame_variables,
|
|
162
|
+
"frame_context_lines": frame_context_lines,
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def _kvcb_from_value(
|
|
167
|
+
val: "dict[str, Any]",
|
|
168
|
+
) -> "KeyValueCollectionBehaviour":
|
|
169
|
+
mode = val.get("mode", "denylist")
|
|
170
|
+
terms = val.get("terms", None)
|
|
171
|
+
|
|
172
|
+
if mode not in _VALID_KEY_VALUE_COLLECTION_BEHAVIOUR_MODES:
|
|
173
|
+
raise ValueError(
|
|
174
|
+
"Invalid collection mode {!r}. Must be one of {}.".format(
|
|
175
|
+
mode, _VALID_KEY_VALUE_COLLECTION_BEHAVIOUR_MODES
|
|
176
|
+
)
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
behaviour: "dict[str, Any]" = {"mode": mode}
|
|
180
|
+
if terms is not None:
|
|
181
|
+
behaviour["terms"] = list(terms)
|
|
182
|
+
return cast("KeyValueCollectionBehaviour", behaviour)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _http_headers_from_value(
|
|
186
|
+
val: "dict[str, Any]",
|
|
187
|
+
) -> "HttpHeadersCollectionBehaviour":
|
|
188
|
+
return {
|
|
189
|
+
"request": (
|
|
190
|
+
_kvcb_from_value(val["request"])
|
|
191
|
+
if "request" in val
|
|
192
|
+
else _kvcb_from_value({"mode": "denylist"})
|
|
193
|
+
),
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def _gen_ai_from_value(val: "dict[str, Any]") -> "GenAICollectionBehaviour":
|
|
198
|
+
return {
|
|
199
|
+
"inputs": val.get("inputs", True),
|
|
200
|
+
"outputs": val.get("outputs", True),
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _graphql_from_value(
|
|
205
|
+
val: "dict[str, Any]",
|
|
206
|
+
) -> "GraphQLCollectionBehaviour":
|
|
207
|
+
return {
|
|
208
|
+
"document": val.get("document", True),
|
|
209
|
+
"variables": val.get("variables", True),
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def _resolve_data_collection(options: "Dict[str, Any]") -> "DataCollection":
|
|
214
|
+
"""
|
|
215
|
+
Resolve the effective ``DataCollection`` dict from client ``options``.
|
|
216
|
+
|
|
217
|
+
Reads ``data_collection``, ``send_default_pii``, ``include_local_variables``
|
|
218
|
+
and ``include_source_context`` and returns a fully-resolved dict with
|
|
219
|
+
concrete values for every field.
|
|
220
|
+
|
|
221
|
+
``data_collection`` must be a plain ``dict``.
|
|
222
|
+
"""
|
|
223
|
+
user_dc = options.get("_experiments", {}).get("data_collection")
|
|
224
|
+
send_default_pii = options.get("send_default_pii")
|
|
225
|
+
|
|
226
|
+
include_local_variables = (
|
|
227
|
+
bool(options.get("include_local_variables"))
|
|
228
|
+
if options.get("include_local_variables") is not None
|
|
229
|
+
else True
|
|
230
|
+
)
|
|
231
|
+
include_source_context = (
|
|
232
|
+
bool(options.get("include_source_context"))
|
|
233
|
+
if options.get("include_source_context") is not None
|
|
234
|
+
else True
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
if user_dc is not None:
|
|
238
|
+
if not isinstance(user_dc, dict):
|
|
239
|
+
raise TypeError(
|
|
240
|
+
"`data_collection` must be a dict, got {!r}.".format(
|
|
241
|
+
type(user_dc).__name__
|
|
242
|
+
)
|
|
243
|
+
)
|
|
244
|
+
if send_default_pii is not None:
|
|
245
|
+
warnings.warn(
|
|
246
|
+
"`send_default_pii` is deprecated and ignored when "
|
|
247
|
+
"`data_collection` is set.",
|
|
248
|
+
DeprecationWarning,
|
|
249
|
+
stacklevel=2,
|
|
250
|
+
)
|
|
251
|
+
return _resolve_explicit(
|
|
252
|
+
user_dc,
|
|
253
|
+
include_local_variables,
|
|
254
|
+
include_source_context,
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
return _map_from_send_default_pii(
|
|
258
|
+
send_default_pii=bool(send_default_pii),
|
|
259
|
+
include_local_variables=include_local_variables,
|
|
260
|
+
include_source_context=include_source_context,
|
|
261
|
+
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import urllib
|
|
2
|
+
from enum import Enum
|
|
2
3
|
from typing import TYPE_CHECKING
|
|
3
4
|
|
|
4
5
|
from sentry_sdk.integrations._wsgi_common import _filter_headers
|
|
@@ -12,6 +13,11 @@ if TYPE_CHECKING:
|
|
|
12
13
|
from sentry_sdk.utils import AnnotatedValue
|
|
13
14
|
|
|
14
15
|
|
|
16
|
+
class _RootPathInPath(Enum):
|
|
17
|
+
EXCLUDED = "excluded"
|
|
18
|
+
EITHER = "either"
|
|
19
|
+
|
|
20
|
+
|
|
15
21
|
def _get_headers(asgi_scope: "Any") -> "Dict[str, str]":
|
|
16
22
|
"""
|
|
17
23
|
Extract headers from the ASGI scope, in the format that the Sentry protocol expects.
|
|
@@ -28,10 +34,27 @@ def _get_headers(asgi_scope: "Any") -> "Dict[str, str]":
|
|
|
28
34
|
return headers
|
|
29
35
|
|
|
30
36
|
|
|
37
|
+
def _get_path(
|
|
38
|
+
asgi_scope: "Dict[str, Any]", root_path_in_path: "_RootPathInPath"
|
|
39
|
+
) -> "str":
|
|
40
|
+
if root_path_in_path is _RootPathInPath.EXCLUDED:
|
|
41
|
+
return asgi_scope.get("root_path", "") + asgi_scope.get("path", "")
|
|
42
|
+
|
|
43
|
+
# Inverse of https://github.com/Kludex/starlette/blob/de970d7b3facb853eb7ad077decbf3d94f2aab6c/starlette/_utils.py#L96
|
|
44
|
+
path = asgi_scope["path"]
|
|
45
|
+
root_path = asgi_scope.get("root_path", "")
|
|
46
|
+
|
|
47
|
+
if not root_path or path == root_path or path.startswith(root_path + "/"):
|
|
48
|
+
return path
|
|
49
|
+
|
|
50
|
+
return root_path + path
|
|
51
|
+
|
|
52
|
+
|
|
31
53
|
def _get_url(
|
|
32
54
|
asgi_scope: "Dict[str, Any]",
|
|
33
55
|
default_scheme: "Literal['ws', 'http']",
|
|
34
56
|
host: "Optional[Union[AnnotatedValue, str]]",
|
|
57
|
+
path: str,
|
|
35
58
|
) -> str:
|
|
36
59
|
"""
|
|
37
60
|
Extract URL from the ASGI scope, without also including the querystring.
|
|
@@ -39,7 +62,6 @@ def _get_url(
|
|
|
39
62
|
scheme = asgi_scope.get("scheme", default_scheme)
|
|
40
63
|
|
|
41
64
|
server = asgi_scope.get("server", None)
|
|
42
|
-
path = asgi_scope.get("root_path", "") + asgi_scope.get("path", "")
|
|
43
65
|
|
|
44
66
|
if host:
|
|
45
67
|
return "%s://%s%s" % (scheme, host, path)
|
|
@@ -81,7 +103,10 @@ def _get_ip(asgi_scope: "Any") -> str:
|
|
|
81
103
|
return asgi_scope.get("client")[0]
|
|
82
104
|
|
|
83
105
|
|
|
84
|
-
def _get_request_data(
|
|
106
|
+
def _get_request_data(
|
|
107
|
+
asgi_scope: "Any",
|
|
108
|
+
root_path_in_path: "_RootPathInPath",
|
|
109
|
+
) -> "Dict[str, Any]":
|
|
85
110
|
"""
|
|
86
111
|
Returns data related to the HTTP request from the ASGI scope.
|
|
87
112
|
"""
|
|
@@ -96,7 +121,10 @@ def _get_request_data(asgi_scope: "Any") -> "Dict[str, Any]":
|
|
|
96
121
|
request_data["query_string"] = _get_query(asgi_scope)
|
|
97
122
|
|
|
98
123
|
request_data["url"] = _get_url(
|
|
99
|
-
asgi_scope,
|
|
124
|
+
asgi_scope,
|
|
125
|
+
"http" if ty == "http" else "ws",
|
|
126
|
+
headers.get("host"),
|
|
127
|
+
path=_get_path(asgi_scope=asgi_scope, root_path_in_path=root_path_in_path),
|
|
100
128
|
)
|
|
101
129
|
|
|
102
130
|
client = asgi_scope.get("client")
|
|
@@ -106,7 +134,10 @@ def _get_request_data(asgi_scope: "Any") -> "Dict[str, Any]":
|
|
|
106
134
|
return request_data
|
|
107
135
|
|
|
108
136
|
|
|
109
|
-
def _get_request_attributes(
|
|
137
|
+
def _get_request_attributes(
|
|
138
|
+
asgi_scope: "Any",
|
|
139
|
+
root_path_in_path: "_RootPathInPath",
|
|
140
|
+
) -> "dict[str, Any]":
|
|
110
141
|
"""
|
|
111
142
|
Return attributes related to the HTTP request from the ASGI scope.
|
|
112
143
|
"""
|
|
@@ -126,8 +157,14 @@ def _get_request_attributes(asgi_scope: "Any") -> "dict[str, Any]":
|
|
|
126
157
|
if query:
|
|
127
158
|
attributes["http.query"] = query
|
|
128
159
|
|
|
160
|
+
path = _get_path(asgi_scope=asgi_scope, root_path_in_path=root_path_in_path)
|
|
161
|
+
attributes["url.path"] = path
|
|
162
|
+
|
|
129
163
|
url_without_query_string = _get_url(
|
|
130
|
-
asgi_scope,
|
|
164
|
+
asgi_scope,
|
|
165
|
+
"http" if ty == "http" else "ws",
|
|
166
|
+
headers.get("host"),
|
|
167
|
+
path=path,
|
|
131
168
|
)
|
|
132
169
|
query_string = _get_query(asgi_scope)
|
|
133
170
|
attributes["url.full"] = (
|