sentry-sdk 2.42.1__py2.py3-none-any.whl → 2.43.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sentry-sdk might be problematic. Click here for more details.

Files changed (36) hide show
  1. sentry_sdk/__init__.py +2 -0
  2. sentry_sdk/_metrics_batcher.py +1 -1
  3. sentry_sdk/consts.py +87 -2
  4. sentry_sdk/integrations/__init__.py +2 -0
  5. sentry_sdk/integrations/django/caching.py +16 -3
  6. sentry_sdk/integrations/google_genai/__init__.py +3 -0
  7. sentry_sdk/integrations/google_genai/utils.py +16 -6
  8. sentry_sdk/integrations/langchain.py +8 -2
  9. sentry_sdk/integrations/litellm.py +11 -4
  10. sentry_sdk/integrations/mcp.py +552 -0
  11. sentry_sdk/integrations/openai_agents/__init__.py +2 -0
  12. sentry_sdk/integrations/openai_agents/patches/__init__.py +1 -0
  13. sentry_sdk/integrations/openai_agents/patches/error_tracing.py +77 -0
  14. sentry_sdk/integrations/pydantic_ai/__init__.py +47 -0
  15. sentry_sdk/integrations/pydantic_ai/consts.py +1 -0
  16. sentry_sdk/integrations/pydantic_ai/patches/__init__.py +4 -0
  17. sentry_sdk/integrations/pydantic_ai/patches/agent_run.py +217 -0
  18. sentry_sdk/integrations/pydantic_ai/patches/graph_nodes.py +105 -0
  19. sentry_sdk/integrations/pydantic_ai/patches/model_request.py +35 -0
  20. sentry_sdk/integrations/pydantic_ai/patches/tools.py +75 -0
  21. sentry_sdk/integrations/pydantic_ai/spans/__init__.py +3 -0
  22. sentry_sdk/integrations/pydantic_ai/spans/ai_client.py +253 -0
  23. sentry_sdk/integrations/pydantic_ai/spans/execute_tool.py +49 -0
  24. sentry_sdk/integrations/pydantic_ai/spans/invoke_agent.py +112 -0
  25. sentry_sdk/integrations/pydantic_ai/utils.py +175 -0
  26. sentry_sdk/integrations/starlette.py +1 -1
  27. sentry_sdk/integrations/strawberry.py +10 -9
  28. sentry_sdk/logger.py +14 -2
  29. sentry_sdk/tracing_utils.py +1 -1
  30. {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/METADATA +6 -1
  31. {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/RECORD +36 -22
  32. /sentry_sdk/{_metrics.py → metrics.py} +0 -0
  33. {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/WHEEL +0 -0
  34. {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/entry_points.txt +0 -0
  35. {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/licenses/LICENSE +0 -0
  36. {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,49 @@
1
+ import sentry_sdk
2
+ from sentry_sdk.consts import OP, SPANDATA
3
+ from sentry_sdk.utils import safe_serialize
4
+
5
+ from ..consts import SPAN_ORIGIN
6
+ from ..utils import _set_agent_data, _should_send_prompts
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from typing import Any
12
+
13
+
14
+ def execute_tool_span(tool_name, tool_args, agent, tool_type="function"):
15
+ # type: (str, Any, Any, str) -> sentry_sdk.tracing.Span
16
+ """Create a span for tool execution.
17
+
18
+ Args:
19
+ tool_name: The name of the tool being executed
20
+ tool_args: The arguments passed to the tool
21
+ agent: The agent executing the tool
22
+ tool_type: The type of tool ("function" for regular tools, "mcp" for MCP services)
23
+ """
24
+ span = sentry_sdk.start_span(
25
+ op=OP.GEN_AI_EXECUTE_TOOL,
26
+ name=f"execute_tool {tool_name}",
27
+ origin=SPAN_ORIGIN,
28
+ )
29
+
30
+ span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "execute_tool")
31
+ span.set_data(SPANDATA.GEN_AI_TOOL_TYPE, tool_type)
32
+ span.set_data(SPANDATA.GEN_AI_TOOL_NAME, tool_name)
33
+
34
+ _set_agent_data(span, agent)
35
+
36
+ if _should_send_prompts() and tool_args is not None:
37
+ span.set_data(SPANDATA.GEN_AI_TOOL_INPUT, safe_serialize(tool_args))
38
+
39
+ return span
40
+
41
+
42
+ def update_execute_tool_span(span, result):
43
+ # type: (sentry_sdk.tracing.Span, Any) -> None
44
+ """Update the execute tool span with the result."""
45
+ if not span:
46
+ return
47
+
48
+ if _should_send_prompts() and result is not None:
49
+ span.set_data(SPANDATA.GEN_AI_TOOL_OUTPUT, safe_serialize(result))
@@ -0,0 +1,112 @@
1
+ import sentry_sdk
2
+ from sentry_sdk.ai.utils import get_start_span_function, set_data_normalized
3
+ from sentry_sdk.consts import OP, SPANDATA
4
+
5
+ from ..consts import SPAN_ORIGIN
6
+ from ..utils import (
7
+ _set_agent_data,
8
+ _set_available_tools,
9
+ _set_model_data,
10
+ _should_send_prompts,
11
+ )
12
+
13
+ from typing import TYPE_CHECKING
14
+
15
+ if TYPE_CHECKING:
16
+ from typing import Any
17
+
18
+
19
+ def invoke_agent_span(user_prompt, agent, model, model_settings):
20
+ # type: (Any, Any, Any, Any) -> sentry_sdk.tracing.Span
21
+ """Create a span for invoking the agent."""
22
+ # Determine agent name for span
23
+ name = "agent"
24
+ if agent and getattr(agent, "name", None):
25
+ name = agent.name
26
+
27
+ span = get_start_span_function()(
28
+ op=OP.GEN_AI_INVOKE_AGENT,
29
+ name=f"invoke_agent {name}",
30
+ origin=SPAN_ORIGIN,
31
+ )
32
+
33
+ span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "invoke_agent")
34
+
35
+ _set_agent_data(span, agent)
36
+ _set_model_data(span, model, model_settings)
37
+ _set_available_tools(span, agent)
38
+
39
+ # Add user prompt and system prompts if available and prompts are enabled
40
+ if _should_send_prompts():
41
+ messages = []
42
+
43
+ # Add system prompts (both instructions and system_prompt)
44
+ system_texts = []
45
+
46
+ if agent:
47
+ # Check for system_prompt
48
+ system_prompts = getattr(agent, "_system_prompts", None) or []
49
+ for prompt in system_prompts:
50
+ if isinstance(prompt, str):
51
+ system_texts.append(prompt)
52
+
53
+ # Check for instructions (stored in _instructions)
54
+ instructions = getattr(agent, "_instructions", None)
55
+ if instructions:
56
+ if isinstance(instructions, str):
57
+ system_texts.append(instructions)
58
+ elif isinstance(instructions, (list, tuple)):
59
+ for instr in instructions:
60
+ if isinstance(instr, str):
61
+ system_texts.append(instr)
62
+ elif callable(instr):
63
+ # Skip dynamic/callable instructions
64
+ pass
65
+
66
+ # Add all system texts as system messages
67
+ for system_text in system_texts:
68
+ messages.append(
69
+ {
70
+ "content": [{"text": system_text, "type": "text"}],
71
+ "role": "system",
72
+ }
73
+ )
74
+
75
+ # Add user prompt
76
+ if user_prompt:
77
+ if isinstance(user_prompt, str):
78
+ messages.append(
79
+ {
80
+ "content": [{"text": user_prompt, "type": "text"}],
81
+ "role": "user",
82
+ }
83
+ )
84
+ elif isinstance(user_prompt, list):
85
+ # Handle list of user content
86
+ content = []
87
+ for item in user_prompt:
88
+ if isinstance(item, str):
89
+ content.append({"text": item, "type": "text"})
90
+ if content:
91
+ messages.append(
92
+ {
93
+ "content": content,
94
+ "role": "user",
95
+ }
96
+ )
97
+
98
+ if messages:
99
+ set_data_normalized(
100
+ span, SPANDATA.GEN_AI_REQUEST_MESSAGES, messages, unpack=False
101
+ )
102
+
103
+ return span
104
+
105
+
106
+ def update_invoke_agent_span(span, output):
107
+ # type: (sentry_sdk.tracing.Span, Any) -> None
108
+ """Update and close the invoke agent span."""
109
+ if span and _should_send_prompts() and output:
110
+ set_data_normalized(
111
+ span, SPANDATA.GEN_AI_RESPONSE_TEXT, str(output), unpack=False
112
+ )
@@ -0,0 +1,175 @@
1
+ import sentry_sdk
2
+ from sentry_sdk.ai.utils import set_data_normalized
3
+ from sentry_sdk.consts import SPANDATA
4
+ from sentry_sdk.scope import should_send_default_pii
5
+ from sentry_sdk.utils import safe_serialize
6
+
7
+ from typing import TYPE_CHECKING
8
+
9
+ if TYPE_CHECKING:
10
+ from typing import Any, List, Dict
11
+ from pydantic_ai.usage import RequestUsage # type: ignore
12
+
13
+
14
+ def _should_send_prompts():
15
+ # type: () -> bool
16
+ """
17
+ Check if prompts should be sent to Sentry.
18
+
19
+ This checks both send_default_pii and the include_prompts integration setting.
20
+ """
21
+ if not should_send_default_pii():
22
+ return False
23
+
24
+ from . import PydanticAIIntegration
25
+
26
+ # Get the integration instance from the client
27
+ integration = sentry_sdk.get_client().get_integration(PydanticAIIntegration)
28
+
29
+ if integration is None:
30
+ return False
31
+
32
+ return getattr(integration, "include_prompts", False)
33
+
34
+
35
+ def _set_agent_data(span, agent):
36
+ # type: (sentry_sdk.tracing.Span, Any) -> None
37
+ """Set agent-related data on a span.
38
+
39
+ Args:
40
+ span: The span to set data on
41
+ agent: Agent object (can be None, will try to get from Sentry scope if not provided)
42
+ """
43
+ # Extract agent name from agent object or Sentry scope
44
+ agent_obj = agent
45
+ if not agent_obj:
46
+ # Try to get from Sentry scope
47
+ agent_data = (
48
+ sentry_sdk.get_current_scope()._contexts.get("pydantic_ai_agent") or {}
49
+ )
50
+ agent_obj = agent_data.get("_agent")
51
+
52
+ if agent_obj and hasattr(agent_obj, "name") and agent_obj.name:
53
+ span.set_data(SPANDATA.GEN_AI_AGENT_NAME, agent_obj.name)
54
+
55
+
56
+ def _get_model_name(model_obj):
57
+ # type: (Any) -> str | None
58
+ """Extract model name from a model object.
59
+
60
+ Args:
61
+ model_obj: Model object to extract name from
62
+
63
+ Returns:
64
+ Model name string or None if not found
65
+ """
66
+ if not model_obj:
67
+ return None
68
+
69
+ if hasattr(model_obj, "model_name"):
70
+ return model_obj.model_name
71
+ elif hasattr(model_obj, "name"):
72
+ try:
73
+ return model_obj.name()
74
+ except Exception:
75
+ return str(model_obj)
76
+ elif isinstance(model_obj, str):
77
+ return model_obj
78
+ else:
79
+ return str(model_obj)
80
+
81
+
82
+ def _set_model_data(span, model, model_settings):
83
+ # type: (sentry_sdk.tracing.Span, Any, Any) -> None
84
+ """Set model-related data on a span.
85
+
86
+ Args:
87
+ span: The span to set data on
88
+ model: Model object (can be None, will try to get from agent if not provided)
89
+ model_settings: Model settings (can be None, will try to get from agent if not provided)
90
+ """
91
+ # Try to get agent from Sentry scope if we need it
92
+ agent_data = sentry_sdk.get_current_scope()._contexts.get("pydantic_ai_agent") or {}
93
+ agent_obj = agent_data.get("_agent")
94
+
95
+ # Extract model information
96
+ model_obj = model
97
+ if not model_obj and agent_obj and hasattr(agent_obj, "model"):
98
+ model_obj = agent_obj.model
99
+
100
+ if model_obj:
101
+ # Set system from model
102
+ if hasattr(model_obj, "system"):
103
+ span.set_data(SPANDATA.GEN_AI_SYSTEM, model_obj.system)
104
+
105
+ # Set model name
106
+ model_name = _get_model_name(model_obj)
107
+ if model_name:
108
+ span.set_data(SPANDATA.GEN_AI_REQUEST_MODEL, model_name)
109
+
110
+ # Extract model settings
111
+ settings = model_settings
112
+ if not settings and agent_obj and hasattr(agent_obj, "model_settings"):
113
+ settings = agent_obj.model_settings
114
+
115
+ if settings:
116
+ settings_map = {
117
+ "max_tokens": SPANDATA.GEN_AI_REQUEST_MAX_TOKENS,
118
+ "temperature": SPANDATA.GEN_AI_REQUEST_TEMPERATURE,
119
+ "top_p": SPANDATA.GEN_AI_REQUEST_TOP_P,
120
+ "frequency_penalty": SPANDATA.GEN_AI_REQUEST_FREQUENCY_PENALTY,
121
+ "presence_penalty": SPANDATA.GEN_AI_REQUEST_PRESENCE_PENALTY,
122
+ }
123
+
124
+ # ModelSettings is a TypedDict (dict at runtime), so use dict access
125
+ if isinstance(settings, dict):
126
+ for setting_name, spandata_key in settings_map.items():
127
+ value = settings.get(setting_name)
128
+ if value is not None:
129
+ span.set_data(spandata_key, value)
130
+ else:
131
+ # Fallback for object-style settings
132
+ for setting_name, spandata_key in settings_map.items():
133
+ if hasattr(settings, setting_name):
134
+ value = getattr(settings, setting_name)
135
+ if value is not None:
136
+ span.set_data(spandata_key, value)
137
+
138
+
139
+ def _set_available_tools(span, agent):
140
+ # type: (sentry_sdk.tracing.Span, Any) -> None
141
+ """Set available tools data on a span from an agent's function toolset.
142
+
143
+ Args:
144
+ span: The span to set data on
145
+ agent: Agent object with _function_toolset attribute
146
+ """
147
+ if not agent or not hasattr(agent, "_function_toolset"):
148
+ return
149
+
150
+ try:
151
+ tools = []
152
+ # Get tools from the function toolset
153
+ if hasattr(agent._function_toolset, "tools"):
154
+ for tool_name, tool in agent._function_toolset.tools.items():
155
+ tool_info = {"name": tool_name}
156
+
157
+ # Add description from function_schema if available
158
+ if hasattr(tool, "function_schema"):
159
+ schema = tool.function_schema
160
+ if getattr(schema, "description", None):
161
+ tool_info["description"] = schema.description
162
+
163
+ # Add parameters from json_schema
164
+ if getattr(schema, "json_schema", None):
165
+ tool_info["parameters"] = schema.json_schema
166
+
167
+ tools.append(tool_info)
168
+
169
+ if tools:
170
+ span.set_data(
171
+ SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS, safe_serialize(tools)
172
+ )
173
+ except Exception:
174
+ # If we can't extract tools, just skip it
175
+ pass
@@ -326,7 +326,7 @@ def _add_user_to_sentry_scope(scope):
326
326
  user_info.setdefault("email", starlette_user.email)
327
327
 
328
328
  sentry_scope = sentry_sdk.get_isolation_scope()
329
- sentry_scope.user = user_info
329
+ sentry_scope.set_user(user_info)
330
330
 
331
331
 
332
332
  def patch_authentication_middleware(middleware_class):
@@ -1,5 +1,6 @@
1
1
  import functools
2
2
  import hashlib
3
+ import warnings
3
4
  from inspect import isawaitable
4
5
 
5
6
  import sentry_sdk
@@ -95,17 +96,19 @@ def _patch_schema_init():
95
96
 
96
97
  extensions = kwargs.get("extensions") or []
97
98
 
99
+ should_use_async_extension = None # type: Optional[bool]
98
100
  if integration.async_execution is not None:
99
101
  should_use_async_extension = integration.async_execution
100
102
  else:
101
103
  # try to figure it out ourselves
102
104
  should_use_async_extension = _guess_if_using_async(extensions)
103
105
 
104
- logger.info(
105
- "Assuming strawberry is running %s. If not, initialize it as StrawberryIntegration(async_execution=%s).",
106
- "async" if should_use_async_extension else "sync",
107
- "False" if should_use_async_extension else "True",
108
- )
106
+ if should_use_async_extension is None:
107
+ warnings.warn(
108
+ "Assuming strawberry is running sync. If not, initialize the integration as StrawberryIntegration(async_execution=True).",
109
+ stacklevel=2,
110
+ )
111
+ should_use_async_extension = False
109
112
 
110
113
  # remove the built in strawberry sentry extension, if present
111
114
  extensions = [
@@ -382,12 +385,10 @@ def _make_response_event_processor(response_data):
382
385
 
383
386
 
384
387
  def _guess_if_using_async(extensions):
385
- # type: (List[SchemaExtension]) -> bool
388
+ # type: (List[SchemaExtension]) -> Optional[bool]
386
389
  if StrawberrySentryAsyncExtension in extensions:
387
390
  return True
388
391
  elif StrawberrySentrySyncExtension in extensions:
389
392
  return False
390
393
 
391
- return bool(
392
- {"starlette", "starlite", "litestar", "fastapi"} & set(_get_installed_modules())
393
- )
394
+ return None
sentry_sdk/logger.py CHANGED
@@ -4,7 +4,7 @@ import time
4
4
  from typing import Any
5
5
 
6
6
  from sentry_sdk import get_client
7
- from sentry_sdk.utils import safe_repr
7
+ from sentry_sdk.utils import safe_repr, capture_internal_exceptions
8
8
 
9
9
  OTEL_RANGES = [
10
10
  # ((severity level range), severity text)
@@ -18,10 +18,19 @@ OTEL_RANGES = [
18
18
  ]
19
19
 
20
20
 
21
+ class _dict_default_key(dict): # type: ignore[type-arg]
22
+ """dict that returns the key if missing."""
23
+
24
+ def __missing__(self, key):
25
+ # type: (str) -> str
26
+ return "{" + key + "}"
27
+
28
+
21
29
  def _capture_log(severity_text, severity_number, template, **kwargs):
22
30
  # type: (str, int, str, **Any) -> None
23
31
  client = get_client()
24
32
 
33
+ body = template
25
34
  attrs = {} # type: dict[str, str | bool | float | int]
26
35
  if "attributes" in kwargs:
27
36
  attrs.update(kwargs.pop("attributes"))
@@ -31,6 +40,9 @@ def _capture_log(severity_text, severity_number, template, **kwargs):
31
40
  # only attach template if there are parameters
32
41
  attrs["sentry.message.template"] = template
33
42
 
43
+ with capture_internal_exceptions():
44
+ body = template.format_map(_dict_default_key(kwargs))
45
+
34
46
  attrs = {
35
47
  k: (
36
48
  v
@@ -51,7 +63,7 @@ def _capture_log(severity_text, severity_number, template, **kwargs):
51
63
  "severity_text": severity_text,
52
64
  "severity_number": severity_number,
53
65
  "attributes": attrs,
54
- "body": template.format(**kwargs),
66
+ "body": body,
55
67
  "time_unix_nano": time.time_ns(),
56
68
  "trace_id": None,
57
69
  },
@@ -330,7 +330,7 @@ def add_http_request_source(span):
330
330
  if span.timestamp is None or span.start_timestamp is None:
331
331
  return
332
332
 
333
- should_add_request_source = client.options.get("enable_http_request_source", False)
333
+ should_add_request_source = client.options.get("enable_http_request_source", True)
334
334
  if not should_add_request_source:
335
335
  return
336
336
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.42.1
3
+ Version: 2.43.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.10
23
23
  Classifier: Programming Language :: Python :: 3.11
24
24
  Classifier: Programming Language :: Python :: 3.12
25
25
  Classifier: Programming Language :: Python :: 3.13
26
+ Classifier: Programming Language :: Python :: 3.14
26
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
28
  Requires-Python: >=3.6
28
29
  Description-Content-Type: text/markdown
@@ -82,6 +83,8 @@ Provides-Extra: litestar
82
83
  Requires-Dist: litestar>=2.0.0; extra == "litestar"
83
84
  Provides-Extra: loguru
84
85
  Requires-Dist: loguru>=0.5; extra == "loguru"
86
+ Provides-Extra: mcp
87
+ Requires-Dist: mcp>=1.15.0; extra == "mcp"
85
88
  Provides-Extra: openai
86
89
  Requires-Dist: openai>=1.0.0; extra == "openai"
87
90
  Requires-Dist: tiktoken>=0.3.0; extra == "openai"
@@ -95,6 +98,8 @@ Provides-Extra: pure-eval
95
98
  Requires-Dist: pure_eval; extra == "pure-eval"
96
99
  Requires-Dist: executing; extra == "pure-eval"
97
100
  Requires-Dist: asttokens; extra == "pure-eval"
101
+ Provides-Extra: pydantic-ai
102
+ Requires-Dist: pydantic-ai>=1.0.0; extra == "pydantic-ai"
98
103
  Provides-Extra: pymongo
99
104
  Requires-Dist: pymongo>=3.1; extra == "pymongo"
100
105
  Provides-Extra: pyspark
@@ -1,22 +1,22 @@
1
- sentry_sdk/__init__.py,sha256=-jRAO-EG4LBj5L20sK01fdMlbtvGf_idy54Eb46EiKQ,1364
1
+ sentry_sdk/__init__.py,sha256=cnZoQ9y329brs-cdzIVtxbO1-o9AIrKk8VTVyZNJs1A,1410
2
2
  sentry_sdk/_compat.py,sha256=Pxcg6cUYPiOoXIFfLI_H3ATb7SfrcXOeZdzpeWv3umI,3116
3
3
  sentry_sdk/_init_implementation.py,sha256=WL54d8nggjRunBm3XlG-sWSx4yS5lpYYggd7YBWpuVk,2559
4
4
  sentry_sdk/_log_batcher.py,sha256=bBpspIlf1ejxlbudo17bZOSir226LGAdjDe_3kHkOro,5085
5
5
  sentry_sdk/_lru_cache.py,sha256=phZMBm9EKU1m67OOApnKCffnlWAlVz9bYjig7CglQuk,1229
6
- sentry_sdk/_metrics.py,sha256=ov1aCqPvcmnDba43HHjWT2flqNPfA5Fa0O0iopcnZpI,2044
7
- sentry_sdk/_metrics_batcher.py,sha256=1W7nmijIsiFAsNfg2jdw6Lm4mwlAFFSnx_Oc2zQmASc,4612
6
+ sentry_sdk/_metrics_batcher.py,sha256=kF-ookqFlpOcAWqlhkhid7QOVYSE9jIp4H2DN8my4uc,4613
8
7
  sentry_sdk/_queue.py,sha256=UUzbmliDYmdVYiDA32NMYkX369ElWMFNSj5kodqVQZE,11250
9
8
  sentry_sdk/_types.py,sha256=ld5Y0yMsLxd6P6tPifw3IqUg8bpFE0hgxPDUmn6B9Xg,10422
10
9
  sentry_sdk/_werkzeug.py,sha256=m3GPf-jHd8v3eVOfBHaKw5f0uHoLkXrSO1EcY-8EisY,3734
11
10
  sentry_sdk/api.py,sha256=OkwQ2tA5YASJ77wLOteUdv_woPF4wL_JTOAMxe9z8k4,15282
12
11
  sentry_sdk/attachments.py,sha256=0Dylhm065O6hNFjB40fWCd5Hg4qWSXndmi1TPWglZkI,3109
13
12
  sentry_sdk/client.py,sha256=z1I9um9NFKSrpjmggdYdRpuP724tv9u9Y9KvFMZNIh0,41394
14
- sentry_sdk/consts.py,sha256=HrtWEre5akvS9FutDy1cWbReT0-0ne7D_2a0-JxZd-w,51058
13
+ sentry_sdk/consts.py,sha256=e1M1-8ByFvBsnbL8A037_kujljlBPhxL_VZsgqx6n8Q,53275
15
14
  sentry_sdk/debug.py,sha256=ddBehQlAuQC1sg1XO-N4N3diZ0x0iT5RWJwFdrtcsjw,1019
16
15
  sentry_sdk/envelope.py,sha256=1nqp_DMw66MYtrszRiiCuodyi3JKcOiQodEMkD6uZ_c,10473
17
16
  sentry_sdk/feature_flags.py,sha256=savtmWAHjAvgw2m_KWW8mUagjLhAXCm3jjscmBlfIJ4,2232
18
17
  sentry_sdk/hub.py,sha256=jg7UqYiJFJ1dknVCNT4_E5lIBfrCFQdWwnJrhgScVNg,25748
19
- sentry_sdk/logger.py,sha256=6tD1sQq3NKAIRgTjRSJyxEvDZMeShj5aUfMhY9hLYIE,2458
18
+ sentry_sdk/logger.py,sha256=NslsNdFyMgZpH4K7QD1bXjgW3AmSecIPtFF-gbe_Pj8,2797
19
+ sentry_sdk/metrics.py,sha256=ov1aCqPvcmnDba43HHjWT2flqNPfA5Fa0O0iopcnZpI,2044
20
20
  sentry_sdk/monitor.py,sha256=52CG1m2e8okFDVoTpbqfm9zeeaLa0ciC_r9x2RiXuDg,3639
21
21
  sentry_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  sentry_sdk/scope.py,sha256=sTNBz212MP6VoKUSZhrDKo-Iq3FXy2ESLLeXL5gE21s,64392
@@ -26,7 +26,7 @@ sentry_sdk/session.py,sha256=BXWHf5Opg9yx7jKe-_iHxF6LDJw9Jnu7NfHxo3UQRpw,5589
26
26
  sentry_sdk/sessions.py,sha256=e7Jv8McW3QZp3H1GuI_CA_ezq_G0ZWY6nK0ZLqJRdNI,9172
27
27
  sentry_sdk/spotlight.py,sha256=93kdd8KxdLfcPaxFnFuqHgYAAL4FCfpK1hiiPoD7Ac4,8678
28
28
  sentry_sdk/tracing.py,sha256=lJG5TmA7mz7-RfJEr34ydgBf-lebRegejHkhdNsHH08,51747
29
- sentry_sdk/tracing_utils.py,sha256=Qq4zPU1wEudCgQyb0nnS4AaTBmCchz6ovghGZEjc91w,40541
29
+ sentry_sdk/tracing_utils.py,sha256=1jwVbHzL4aTT5BzkSdmWtfoL9feYaxszdj2AZKCG37I,40540
30
30
  sentry_sdk/transport.py,sha256=NzlBS5liRSh0Fm7Zi7sPdZG82uECw9myECs_JrClqkg,31878
31
31
  sentry_sdk/types.py,sha256=A92AqvfrGQZ9KY6FaUjKfL9F1HK7Ui3heQilVzfzYCs,1269
32
32
  sentry_sdk/utils.py,sha256=GkvrDyBVD0vQ31Roe2pGO7nEM2ykrgXUSpg9J1sjjH4,63429
@@ -38,7 +38,7 @@ sentry_sdk/crons/__init__.py,sha256=3Zt6g1-pZZ12uRKKsC8QLm3XgJ4K1VYxgVpNNUygOZY,
38
38
  sentry_sdk/crons/api.py,sha256=mk-UB8Im2LU2rJFdE-TV302EaKnf8kAjwEL0bIV0Hzc,1767
39
39
  sentry_sdk/crons/consts.py,sha256=dXqJk5meBSu5rjlGpqAOlkpACnuUi7svQnAFoy1ZNUU,87
40
40
  sentry_sdk/crons/decorator.py,sha256=UrjeIqBCbvsuKrfjGkKJbbLBvjw2TQvDWcTO7WwAmrI,3913
41
- sentry_sdk/integrations/__init__.py,sha256=c-0q-kzVEKt_2-bk2X4f4LLXnykTmldcjo98dEQmPms,10442
41
+ sentry_sdk/integrations/__init__.py,sha256=adxzAhoa6VLVAnhvzpKGVhX0kh-aHHmYrzaaXIKuRfw,10495
42
42
  sentry_sdk/integrations/_asgi_common.py,sha256=Ypg7IctB3iPPY60ebVlzChzgT8GeGpZ0YH8VvJNDlEY,3187
43
43
  sentry_sdk/integrations/_wsgi_common.py,sha256=A1-X7l1pZCcrbUhRHkmdKiK_EemEZjn7xToJIvlEuFM,7558
44
44
  sentry_sdk/integrations/aiohttp.py,sha256=FynazdaPWCanC91KKVba8yl0UwWnVJcJxWNPzSu64x0,13007
@@ -72,13 +72,14 @@ sentry_sdk/integrations/graphene.py,sha256=I6ZJ8Apd9dO9XPVvZY7I46-v1eXOW1C1rAkWw
72
72
  sentry_sdk/integrations/httpx.py,sha256=HK0Nbxc4TAFesTz6gegz6tAHcIXKlOckFWrBHMBB0VM,6086
73
73
  sentry_sdk/integrations/huey.py,sha256=wlyxjeWqqJp1X5S3neD5FiZjXcyznm1dl8_u1wIo76U,5443
74
74
  sentry_sdk/integrations/huggingface_hub.py,sha256=B5z0--bC2tEDtWl5V7xAqM4234yhY_RYbnkZGgqC8PA,14952
75
- sentry_sdk/integrations/langchain.py,sha256=5rwH6NaRnWZ_Mli1W-iw_qJFxoWpzFT1Mfn_lQLKz3Q,31333
75
+ sentry_sdk/integrations/langchain.py,sha256=J6HOyXkcr8wVMY1Zz2m4cswVN5AfHN6A6e7tegVHsGA,31489
76
76
  sentry_sdk/integrations/langgraph.py,sha256=YQK8-d124XDoDrE1eTN4q3Sbr8v9P4tzyqk06F1-2IE,11835
77
77
  sentry_sdk/integrations/launchdarkly.py,sha256=L5yE9NBRon8JPYzO6XT-dA4YkvNcrUfK4nD5fycSXM0,1934
78
- sentry_sdk/integrations/litellm.py,sha256=xxcRdU0cYyZ6BRorIT2rFgYJvSHo1V5Hf1T_0oj_1sY,8954
78
+ sentry_sdk/integrations/litellm.py,sha256=yRSyhd7rfcDw1ZJ1FL5HqGtCcvfpaw_vyl0s0H_CQfk,9183
79
79
  sentry_sdk/integrations/litestar.py,sha256=0BkfynHkxERshbxycwHDnpjzGx31c5ipYvBYqprAoHY,11830
80
80
  sentry_sdk/integrations/logging.py,sha256=L1f3dej3Zdn9wyB5_mzvzyk4bF-HvFFmhGegfBfMPnA,13892
81
81
  sentry_sdk/integrations/loguru.py,sha256=JmIiVnkjbEzb8dRsFln4T7Ft_GULyXEt7w5t-p5Zdt4,6202
82
+ sentry_sdk/integrations/mcp.py,sha256=r7O582Vu4Erx-aticc0P8c5rZ-we6J9b0hW6IVEDX9M,19373
82
83
  sentry_sdk/integrations/modules.py,sha256=vzLx3Erg77Vl4mnUvAgTg_3teAuWy7zylFpAidBI9I0,820
83
84
  sentry_sdk/integrations/openai.py,sha256=nYf45SQE4tKsDbbA1kKAhmBIqQzKGtJGoqAhOYTBLhI,24764
84
85
  sentry_sdk/integrations/openfeature.py,sha256=-vvdrN4fK0Xhu2ip41bkPIPEqdzv8xzmLu9wRlI2xPA,1131
@@ -93,11 +94,11 @@ sentry_sdk/integrations/sanic.py,sha256=Z7orxkX9YhU9YSX4Oidsi3n46J0qlVG7Ajog-fnU
93
94
  sentry_sdk/integrations/serverless.py,sha256=npiKJuIy_sEkWT_x0Eu2xSEMiMh_aySqGYlnvIROsYk,1804
94
95
  sentry_sdk/integrations/socket.py,sha256=hlJDYlspzOy3UNjsd7qXPUoqJl5s1ShF3iijTRWpVaU,3169
95
96
  sentry_sdk/integrations/sqlalchemy.py,sha256=rzOK3yFLrRE3V7q-wVcAUhq5iSTrqGPW5ytbGU9lXkk,4344
96
- sentry_sdk/integrations/starlette.py,sha256=oHuzJXRWnCgD22Q9_JHfuD2OSW7gIt_wwA-TTwJ_2ng,26235
97
+ sentry_sdk/integrations/starlette.py,sha256=cLmbx_KgdZZFLE4prx6PV5S4XOdnlbdV5c1iwZXxDVQ,26238
97
98
  sentry_sdk/integrations/starlite.py,sha256=hSiVB6KZr8pxsQVRSGGP-9UQBLsBl-3DmrK_5CPebB8,10559
98
99
  sentry_sdk/integrations/statsig.py,sha256=-e57hxHfHo1S13YQKObV65q_UvREyxbR56fnf7bkC9o,1227
99
100
  sentry_sdk/integrations/stdlib.py,sha256=4EeLQeU3yjPyjPORX6K0B5N8D5ZXT3eDAFIwjDckUj8,8968
100
- sentry_sdk/integrations/strawberry.py,sha256=u7Lk4u3sNEycdSmY1nQBzYKmqI-mO8BWKAAJkCSuTRA,14126
101
+ sentry_sdk/integrations/strawberry.py,sha256=6eOvI9rxl_w84BWxHmveExfB3HIberCiVKV8o06ugv4,14155
101
102
  sentry_sdk/integrations/sys_exit.py,sha256=AwShgGBWPdiY25aOWDLRAs2RBUKm5T3CrL-Q-zAk0l4,2493
102
103
  sentry_sdk/integrations/threading.py,sha256=0lNxcMLN7Z5DwLg9d1Of7lgGcMOggsM76bU35hIOGXA,7109
103
104
  sentry_sdk/integrations/tornado.py,sha256=Qcft8FZxdVICnaa1AhsDB262sInEQZPf-pvgI-Agjmc,7206
@@ -111,16 +112,16 @@ sentry_sdk/integrations/celery/beat.py,sha256=WHEdKetrDJgtZGNp1VUMa6BG1q-MhsLZMe
111
112
  sentry_sdk/integrations/celery/utils.py,sha256=CMWQOpg9yniEkm3WlXe7YakJfVnLwaY0-jyeo2GX-ZI,1208
112
113
  sentry_sdk/integrations/django/__init__.py,sha256=KqAgBKkuyJGw0lqNZBj0otqZGy_YHqPsisgPZLCN8mQ,25247
113
114
  sentry_sdk/integrations/django/asgi.py,sha256=R5wQYS6HAaSM9rmO5bnTHNt6pClthM6LsrgSioTSZSM,8349
114
- sentry_sdk/integrations/django/caching.py,sha256=UvYaiI7xrN08Se59vMgJWrSO2BuowOyx3jmXmZoxQJo,6427
115
+ sentry_sdk/integrations/django/caching.py,sha256=c36y2wL4t-ZPIJgMI_gZ4kZ_-IFmVkdehch3fbR7JL0,7010
115
116
  sentry_sdk/integrations/django/middleware.py,sha256=UVKq134w_TyOVPV7WwBW0QjHY-ziDipcZBIDQmjqceE,6009
116
117
  sentry_sdk/integrations/django/signals_handlers.py,sha256=iudWetTlzNr5-kx_ew1YwW_vZ0yDChoonwPZB7AYGPo,3098
117
118
  sentry_sdk/integrations/django/templates.py,sha256=k3PQrNICGS4wqmFxK3o8KwOlqip7rSIryyc4oa1Wexc,5725
118
119
  sentry_sdk/integrations/django/transactions.py,sha256=Axyh3l4UvM96R3go2anVhew3JbrEZ4FSYd1r3UXEcw4,4951
119
120
  sentry_sdk/integrations/django/views.py,sha256=bjHwt6TVfYY7yfGUa2Rat9yowkUbQ2bYCcJaXJxP2Ik,3137
120
- sentry_sdk/integrations/google_genai/__init__.py,sha256=BeE4uK8CjwU1qC3_CDEahSVZNpxMDu78o2IjUCbNDIQ,11208
121
+ sentry_sdk/integrations/google_genai/__init__.py,sha256=smYAekNn-Q2toS1l2cwZ4qfczGYw211O8JY-eFVvzOE,11417
121
122
  sentry_sdk/integrations/google_genai/consts.py,sha256=nqHKKSyGixrSoozA06BGVBFaUCsvZlvGoubUZGI1kB8,559
122
123
  sentry_sdk/integrations/google_genai/streaming.py,sha256=cRRbVD2Xv3ncoS2ICYhoPGVpHaOK_HHjXhCIij9Kos0,5191
123
- sentry_sdk/integrations/google_genai/utils.py,sha256=6CB4DI0qXjyH2QXnzss19DhAv4HSc9fpS5d-63MWskk,19679
124
+ sentry_sdk/integrations/google_genai/utils.py,sha256=zxrt7GluvQfG5r9EniRCFbtJGKnaeQtePKR0jc7hskQ,20066
124
125
  sentry_sdk/integrations/grpc/__init__.py,sha256=zukyRYtaxRGcDuQSXBbVcpa7ZMAYdLQ-laRQqqHsHgc,5620
125
126
  sentry_sdk/integrations/grpc/client.py,sha256=4MCY24tqZAU6OzNC_0pphyCLnR_SrfBC-xh8Kb-i8LU,3373
126
127
  sentry_sdk/integrations/grpc/consts.py,sha256=NpsN5gKWDmtGtVK_L5HscgFZBHqjOpmLJLGKyh8GZBA,31
@@ -128,11 +129,12 @@ sentry_sdk/integrations/grpc/server.py,sha256=oo79zjfGaJtCSwtxaJeCFRA6UWoH1PDzjR
128
129
  sentry_sdk/integrations/grpc/aio/__init__.py,sha256=2rgrliowpPfLLw40_2YU6ixSzIu_3f8NN3TRplzc8S8,141
129
130
  sentry_sdk/integrations/grpc/aio/client.py,sha256=3zfF3XkpzR717BpY1ehxi72jDUvT8Xntx8vkD78kCXc,3327
130
131
  sentry_sdk/integrations/grpc/aio/server.py,sha256=SCkdikPZRdWyrlnZewsSGpPk4v6AsdSApVAbO-lf_Lk,4019
131
- sentry_sdk/integrations/openai_agents/__init__.py,sha256=-ydqG0sFIrvJlT9JHO58EZpCAzyy9J59Av8dxn0fHuw,1424
132
+ sentry_sdk/integrations/openai_agents/__init__.py,sha256=yPMTnW6dGt4aiK5z-nvGz80uCcn12LFh2JFpgDGDq44,1481
132
133
  sentry_sdk/integrations/openai_agents/consts.py,sha256=PTb3vlqkuMPktu21ALK72o5WMIX4-cewTEiTRdHKFdQ,38
133
134
  sentry_sdk/integrations/openai_agents/utils.py,sha256=fa3r6iHLjTtrU2dHM_7D_0lDQAHR3CUSutIa6Wf7efg,6808
134
- sentry_sdk/integrations/openai_agents/patches/__init__.py,sha256=I7C9JZ70Mf8PV3wPdFsxTqvcYl4TYUgSZYfNU2Spb7Y,231
135
+ sentry_sdk/integrations/openai_agents/patches/__init__.py,sha256=w8SAe7cBFf5JL58lZK-yp5a8vDYgVRH-qMIsxq3kClk,293
135
136
  sentry_sdk/integrations/openai_agents/patches/agent_run.py,sha256=GPBV-j8YnHOrJAhdhu_tphe14z7G0-riFVmjFNDgy0s,5773
137
+ sentry_sdk/integrations/openai_agents/patches/error_tracing.py,sha256=lHfDQGjfHBH9fEn92gs2RTDDjL1pln4uTrylb2bsML8,2629
136
138
  sentry_sdk/integrations/openai_agents/patches/models.py,sha256=DtwqCmSsYFlhRZquKM2jiTOnnAg97eyCTtJYZkWqdww,1405
137
139
  sentry_sdk/integrations/openai_agents/patches/runner.py,sha256=Fr5tflgadu3fnEThSZauAhrT7BbvemuZelDVGZjleqA,1483
138
140
  sentry_sdk/integrations/openai_agents/patches/tools.py,sha256=uAx1GgsiDJBP7jpYW8r_kOImdgzXlwYqK-uhkyP3icI,3255
@@ -147,6 +149,18 @@ sentry_sdk/integrations/opentelemetry/consts.py,sha256=fYL6FIAEfnGZGBhFn5X7aRyHx
147
149
  sentry_sdk/integrations/opentelemetry/integration.py,sha256=CWp6hFFMqoR7wcuwTRbRO-1iVch4A6oOB3RuHWeX9GQ,1791
148
150
  sentry_sdk/integrations/opentelemetry/propagator.py,sha256=NpCgv2Ibq1LUrv8-URayZaPGSzz0f1tJsf7aaxAZ5pc,3720
149
151
  sentry_sdk/integrations/opentelemetry/span_processor.py,sha256=IBF75ld9zJLNF1-4EYnNBoAS00_XTXjPio86zPX9DLQ,13276
152
+ sentry_sdk/integrations/pydantic_ai/__init__.py,sha256=milAmxTbyxof1IYLuZwuEMiqRcXcslyfZdhD0nnodhc,1232
153
+ sentry_sdk/integrations/pydantic_ai/consts.py,sha256=fxOQ5n_Do8EqqqxtOJm5zyvhQmOV75HACNrt_-zGngs,36
154
+ sentry_sdk/integrations/pydantic_ai/utils.py,sha256=EZz9B69cQTp6PC3BcDVLfKz-o6D4RYcR9Bq1qC2xSNg,5893
155
+ sentry_sdk/integrations/pydantic_ai/patches/__init__.py,sha256=_RHvjc3436KSwPjzrAdnyascgggxg5e0MQpdHhmiS-U,229
156
+ sentry_sdk/integrations/pydantic_ai/patches/agent_run.py,sha256=W7kDeNSlefl07XyK5C5r3XTDTQSNULyOYCDgDCcSGQU,7616
157
+ sentry_sdk/integrations/pydantic_ai/patches/graph_nodes.py,sha256=iCQ7UMUu4VbfLRfAwfBhMEpqo91xkjH3qqIaIFDSzzs,3708
158
+ sentry_sdk/integrations/pydantic_ai/patches/model_request.py,sha256=qqc7KqCdgrEtxRtTgOdV1E5dVk3n09dHz6KAokiI950,1116
159
+ sentry_sdk/integrations/pydantic_ai/patches/tools.py,sha256=z47oQSZ_6EFTABzChjthrESon-PbraxDneteFGwNeLc,2405
160
+ sentry_sdk/integrations/pydantic_ai/spans/__init__.py,sha256=dTUjvkw7VMOAiSasuAq37q_njvANsUlgfZxgXRKJDDo,243
161
+ sentry_sdk/integrations/pydantic_ai/spans/ai_client.py,sha256=8oK_o8q9X7T0IKzlju9HimYN9S3pjY678vN-Zp4W-oo,9111
162
+ sentry_sdk/integrations/pydantic_ai/spans/execute_tool.py,sha256=T9Dn2NV8HFfT3YO4iqh3v3eZjsYeZKLAQcGoWM4y_Eo,1540
163
+ sentry_sdk/integrations/pydantic_ai/spans/invoke_agent.py,sha256=p62DK9sBZoB0w-O1QAHCi774-nTEEqiBtbdsWvvNaqk,3697
150
164
  sentry_sdk/integrations/redis/__init__.py,sha256=As5XhbOue-9Sy9d8Vr8cZagbO_Bc0uG8n2G3YNMP7TU,1332
151
165
  sentry_sdk/integrations/redis/_async_common.py,sha256=A-23KY7JkkZ8g6FufnGo6IHK7Ln-jtZmopVH5WhqdkE,4056
152
166
  sentry_sdk/integrations/redis/_sync_common.py,sha256=MS5Bc94cqispn4ZM-WSH02GrgnB6chvrnf0JBabTNMU,3796
@@ -166,9 +180,9 @@ sentry_sdk/profiler/__init__.py,sha256=3PI3bHk9RSkkOXZKN84DDedk_7M65EiqqaIGo-DYs
166
180
  sentry_sdk/profiler/continuous_profiler.py,sha256=7Qb75TaKLNYxMA97wO-qEpDVqxPQWOLUi2rnUm6_Ci0,23066
167
181
  sentry_sdk/profiler/transaction_profiler.py,sha256=e3MsUqs-YIp6-nmzpmBYGoWWIF7RyuSGu24Dj-8GXAU,27970
168
182
  sentry_sdk/profiler/utils.py,sha256=80MF0wiguKe47O-uWQfl-81G1caiVa8HgcFHWBzFpuM,6492
169
- sentry_sdk-2.42.1.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
170
- sentry_sdk-2.42.1.dist-info/METADATA,sha256=uy8suH349SXIQp0HrqMEtLoY0olv2VtVzCWmfxDhY_A,10523
171
- sentry_sdk-2.42.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
172
- sentry_sdk-2.42.1.dist-info/entry_points.txt,sha256=qacZEz40UspQZD1IukCXykx0JtImqGDOctS5KfOLTko,91
173
- sentry_sdk-2.42.1.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
174
- sentry_sdk-2.42.1.dist-info/RECORD,,
183
+ sentry_sdk-2.43.0.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
184
+ sentry_sdk-2.43.0.dist-info/METADATA,sha256=RQSUgR3sADQWiurjKyWS-P85emph9dg0gevL9gjRfYM,10723
185
+ sentry_sdk-2.43.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
186
+ sentry_sdk-2.43.0.dist-info/entry_points.txt,sha256=qacZEz40UspQZD1IukCXykx0JtImqGDOctS5KfOLTko,91
187
+ sentry_sdk-2.43.0.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
188
+ sentry_sdk-2.43.0.dist-info/RECORD,,
File without changes