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.
- sentry_sdk/__init__.py +2 -0
- sentry_sdk/_metrics_batcher.py +1 -1
- sentry_sdk/consts.py +87 -2
- sentry_sdk/integrations/__init__.py +2 -0
- sentry_sdk/integrations/django/caching.py +16 -3
- sentry_sdk/integrations/google_genai/__init__.py +3 -0
- sentry_sdk/integrations/google_genai/utils.py +16 -6
- sentry_sdk/integrations/langchain.py +8 -2
- sentry_sdk/integrations/litellm.py +11 -4
- sentry_sdk/integrations/mcp.py +552 -0
- sentry_sdk/integrations/openai_agents/__init__.py +2 -0
- sentry_sdk/integrations/openai_agents/patches/__init__.py +1 -0
- sentry_sdk/integrations/openai_agents/patches/error_tracing.py +77 -0
- sentry_sdk/integrations/pydantic_ai/__init__.py +47 -0
- sentry_sdk/integrations/pydantic_ai/consts.py +1 -0
- sentry_sdk/integrations/pydantic_ai/patches/__init__.py +4 -0
- sentry_sdk/integrations/pydantic_ai/patches/agent_run.py +217 -0
- sentry_sdk/integrations/pydantic_ai/patches/graph_nodes.py +105 -0
- sentry_sdk/integrations/pydantic_ai/patches/model_request.py +35 -0
- sentry_sdk/integrations/pydantic_ai/patches/tools.py +75 -0
- sentry_sdk/integrations/pydantic_ai/spans/__init__.py +3 -0
- sentry_sdk/integrations/pydantic_ai/spans/ai_client.py +253 -0
- sentry_sdk/integrations/pydantic_ai/spans/execute_tool.py +49 -0
- sentry_sdk/integrations/pydantic_ai/spans/invoke_agent.py +112 -0
- sentry_sdk/integrations/pydantic_ai/utils.py +175 -0
- sentry_sdk/integrations/starlette.py +1 -1
- sentry_sdk/integrations/strawberry.py +10 -9
- sentry_sdk/logger.py +14 -2
- sentry_sdk/tracing_utils.py +1 -1
- {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/METADATA +6 -1
- {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/RECORD +36 -22
- /sentry_sdk/{_metrics.py → metrics.py} +0 -0
- {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/WHEEL +0 -0
- {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/entry_points.txt +0 -0
- {sentry_sdk-2.42.1.dist-info → sentry_sdk-2.43.0.dist-info}/licenses/LICENSE +0 -0
- {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.
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
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":
|
|
66
|
+
"body": body,
|
|
55
67
|
"time_unix_nano": time.time_ns(),
|
|
56
68
|
"trace_id": None,
|
|
57
69
|
},
|
sentry_sdk/tracing_utils.py
CHANGED
|
@@ -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",
|
|
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.
|
|
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
|
|
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/
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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.
|
|
170
|
-
sentry_sdk-2.
|
|
171
|
-
sentry_sdk-2.
|
|
172
|
-
sentry_sdk-2.
|
|
173
|
-
sentry_sdk-2.
|
|
174
|
-
sentry_sdk-2.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|