test_exceptions.py•1.37 kB
"""Tests for exception classes."""
from collections.abc import Callable
from typing import Any
import pytest
from pydantic_ai import ModelRetry
from pydantic_ai.exceptions import (
AgentRunError,
ApprovalRequired,
CallDeferred,
IncompleteToolCall,
ModelHTTPError,
UnexpectedModelBehavior,
UsageLimitExceeded,
UserError,
)
@pytest.mark.parametrize(
'exc_factory',
[
lambda: ModelRetry('test'),
lambda: CallDeferred(),
lambda: ApprovalRequired(),
lambda: UserError('test'),
lambda: AgentRunError('test'),
lambda: UnexpectedModelBehavior('test'),
lambda: UsageLimitExceeded('test'),
lambda: ModelHTTPError(500, 'model'),
lambda: IncompleteToolCall('test'),
],
ids=[
'ModelRetry',
'CallDeferred',
'ApprovalRequired',
'UserError',
'AgentRunError',
'UnexpectedModelBehavior',
'UsageLimitExceeded',
'ModelHTTPError',
'IncompleteToolCall',
],
)
def test_exceptions_hashable(exc_factory: Callable[[], Any]):
"""Test that all exception classes are hashable and usable as keys."""
exc = exc_factory()
# Does not raise TypeError
_ = hash(exc)
# Can be used in sets and dicts
s = {exc}
d = {exc: 'value'}
assert exc in s
assert d[exc] == 'value'