Skip to content

Commit c0a288f

Browse files
committed
Fix ZoneInfo with various invalid types (#10408)
1 parent ea6115d commit c0a288f

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

pydantic/_internal/_generate_schema.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1657,7 +1657,7 @@ def validate_str_is_valid_iana_tz(value: Any, /) -> ZoneInfo:
16571657
return value
16581658
try:
16591659
return ZoneInfo(value)
1660-
except (ZoneInfoNotFoundError, ValueError):
1660+
except (ZoneInfoNotFoundError, ValueError, TypeError):
16611661
raise PydanticCustomError('zoneinfo_str', 'invalid timezone: {value}', {'value': value})
16621662

16631663
metadata = build_metadata_dict(js_functions=[lambda _1, _2: {'type': 'string', 'format': 'zoneinfo'}])

tests/test_types_zoneinfo.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
from datetime import timezone
2+
from typing import Union
3+
14
import pytest
25

3-
from pydantic import BaseModel, ValidationError
6+
from pydantic import BaseModel, ConfigDict, TypeAdapter, ValidationError
47

58
zoneinfo = pytest.importorskip('zoneinfo', reason='zoneinfo requires >=3.9')
69

@@ -48,3 +51,8 @@ def test_zoneinfo_json_schema():
4851
'properties': {'tz': {'type': 'string', 'format': 'zoneinfo', 'title': 'Tz'}},
4952
'required': ['tz'],
5053
}
54+
55+
56+
def test_zoneinfo_union() -> None:
57+
ta = TypeAdapter(Union[zoneinfo.ZoneInfo, timezone], config=ConfigDict(arbitrary_types_allowed=True))
58+
assert ta.validate_python(timezone.utc) is timezone.utc

0 commit comments

Comments
 (0)