Skip to content

Commit a67c7e0

Browse files
committed
feat: ✨ Add support for set and tuple types
1 parent 984e41c commit a67c7e0

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

pydantic_async_validation/mixins.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ async def extend_with_validation_errors_by(
103103
attribute_value,
104104
)
105105
# List of child instances
106-
if isinstance(attribute_value, list):
106+
if isinstance(attribute_value, (list, set, tuple)):
107107
for index, item in enumerate(attribute_value):
108108
if isinstance(item, AsyncValidationModelMixin):
109109
await extend_with_validation_errors_by(

tests/test_field_validators.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Dict, List
1+
from typing import Any, Dict, List, Set, Tuple
22

33
import pydantic
44
import pytest
@@ -129,20 +129,23 @@ async def validate_name(self, config: ValidationInfo) -> None:
129129
async def test_async_validation_will_call_sub_model_validation():
130130
class OtherModel(AsyncValidationModelMixin, pydantic.BaseModel):
131131
something: SomethingModel
132-
somethings: List[SomethingModel]
132+
something_list: List[SomethingModel]
133+
something_tuple: Tuple[SomethingModel]
133134
somethings_by_name: Dict[str, SomethingModel]
134135

135136
instance = OtherModel(
136137
something=SomethingModel(name="invalid", age=1),
137-
somethings=[SomethingModel(name="invalid", age=1)],
138+
something_list=[SomethingModel(name="invalid", age=1)],
139+
something_tuple=(SomethingModel(name="invalid", age=1),),
138140
somethings_by_name={"some": SomethingModel(name="invalid", age=1)},
139141
)
140142
with pytest.raises(pydantic.ValidationError) as O_o:
141143
await instance.model_async_validate()
142144

143-
assert len(O_o.value.errors()) == 3
145+
assert len(O_o.value.errors()) == 4
144146
assert {e['loc'] for e in O_o.value.errors()} == {
145147
('something', 'name'),
146-
('somethings', 0, 'name'),
148+
('something_list', 0, 'name'),
149+
('something_tuple', 0, 'name'),
147150
('somethings_by_name', 'some', 'name'),
148151
}

0 commit comments

Comments
 (0)