A validator that performs deep validation of an iterable. Args: member_validator: Validator(s) to apply to iterable members. iterable_validator: Validator(s) to apply to iterable itself (optional). Raises TypeError: if any sub-validators fail
(member_validator, iterable_validator=None)
| 359 | |
| 360 | |
| 361 | def deep_iterable(member_validator, iterable_validator=None): |
| 362 | class="st">""" |
| 363 | A validator that performs deep validation of an iterable. |
| 364 | |
| 365 | Args: |
| 366 | member_validator: Validator(s) to apply to iterable members. |
| 367 | |
| 368 | iterable_validator: |
| 369 | Validator(s) to apply to iterable itself (optional). |
| 370 | |
| 371 | Raises |
| 372 | TypeError: if any sub-validators fail |
| 373 | |
| 374 | .. versionadded:: 19.1.0 |
| 375 | |
| 376 | .. versionchanged:: 25.4.0 |
| 377 | *member_validator* and *iterable_validator* can now be a list or tuple |
| 378 | of validators. |
| 379 | class="st">""" |
| 380 | if isinstance(member_validator, (list, tuple)): |
| 381 | member_validator = and_(*member_validator) |
| 382 | if isinstance(iterable_validator, (list, tuple)): |
| 383 | iterable_validator = and_(*iterable_validator) |
| 384 | return _DeepIterable(member_validator, iterable_validator) |
| 385 | |
| 386 | |
| 387 | @attrs(repr=False, slots=True, unsafe_hash=True) |