|
1 | 1 | from fractions import Fraction
|
| 2 | +from itertools import islice |
2 | 3 | from urllib.parse import urldefrag, urljoin
|
3 | 4 | import re
|
4 | 5 |
|
@@ -66,21 +67,13 @@ def items(validator, items, instance, schema):
|
66 | 67 | if not validator.is_type(instance, "array"):
|
67 | 68 | return
|
68 | 69 |
|
69 |
| - if validator.is_type(items, "boolean") and "prefixItems" in schema: |
70 |
| - if not items: |
71 |
| - got = len(instance) |
72 |
| - maximum = len(schema["prefixItems"]) |
73 |
| - if got > maximum: |
74 |
| - message = f"Expected at most {maximum} items, but found {got}" |
75 |
| - yield ValidationError(message) |
| 70 | + prefix = len(schema.get("prefixItems", [])) |
| 71 | + if items is False and len(instance) > prefix: |
| 72 | + message = f"Expected at most {prefix} items, but found {len(instance)}" |
| 73 | + yield ValidationError(message) |
76 | 74 | else:
|
77 |
| - non_prefixed_items = ( |
78 |
| - instance[len(schema["prefixItems"]):] |
79 |
| - if "prefixItems" in schema else instance |
80 |
| - ) |
81 |
| - |
82 |
| - for index, item in enumerate(non_prefixed_items): |
83 |
| - yield from validator.descend(item, items, path=index) |
| 75 | + for item in islice(instance, prefix, None): |
| 76 | + yield from validator.descend(instance=item, schema=items) |
84 | 77 |
|
85 | 78 |
|
86 | 79 | def additionalItems(validator, aI, instance, schema):
|
@@ -448,5 +441,5 @@ def prefixItems(validator, prefixItems, instance, schema):
|
448 | 441 | if not validator.is_type(instance, "array"):
|
449 | 442 | return
|
450 | 443 |
|
451 |
| - for (index, each), subschema in zip(enumerate(instance), prefixItems): |
452 |
| - yield from validator.descend(each, subschema, schema_path=index) |
| 444 | + for (index, item), subschema in zip(enumerate(instance), prefixItems): |
| 445 | + yield from validator.descend(item, subschema, schema_path=index) |
0 commit comments