54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
"""Verify that all public exception classes are re-exported from the top-level agents package."""
|
|
|
|
from typing import Any, cast
|
|
|
|
import pytest
|
|
|
|
import agents
|
|
from agents import exceptions as exceptions_module
|
|
|
|
|
|
def test_mcp_tool_cancellation_error_is_exported_at_top_level() -> None:
|
|
# MCPToolCancellationError is a public exception users may need to catch from MCP tool
|
|
# invocations. It must be importable from `agents` like its sibling exception types.
|
|
from agents import MCPToolCancellationError
|
|
|
|
assert MCPToolCancellationError is exceptions_module.MCPToolCancellationError
|
|
assert "MCPToolCancellationError" in agents.__all__
|
|
|
|
|
|
def test_all_public_exception_classes_are_reexported() -> None:
|
|
# Every concrete exception class subclassing AgentsException in agents.exceptions
|
|
# should be re-exported from the top-level `agents` package, so users have a
|
|
# single import path for catching SDK errors.
|
|
public_exception_names = [
|
|
name
|
|
for name, obj in vars(exceptions_module).items()
|
|
if isinstance(obj, type)
|
|
and issubclass(obj, exceptions_module.AgentsException)
|
|
and not name.startswith("_")
|
|
]
|
|
|
|
for name in public_exception_names:
|
|
assert hasattr(agents, name), f"agents.{name} is not re-exported from agents package"
|
|
assert name in agents.__all__, f"{name} is missing from agents.__all__"
|
|
|
|
|
|
def test_run_error_details_str_uses_pretty_printer(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
details = exceptions_module.RunErrorDetails(
|
|
input="hello",
|
|
new_items=[],
|
|
raw_responses=[],
|
|
last_agent=cast(Any, object()),
|
|
context_wrapper=cast(Any, object()),
|
|
input_guardrail_results=[],
|
|
output_guardrail_results=[],
|
|
)
|
|
monkeypatch.setattr(
|
|
exceptions_module,
|
|
"pretty_print_run_error_details",
|
|
lambda value: "formatted details" if value is details else "unexpected",
|
|
)
|
|
|
|
assert str(details) == "formatted details"
|