Skip to content

Commit 60d689c

Browse files
committed
And simplify items as well.
1 parent 641e9b8 commit 60d689c

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

jsonschema/_validators.py

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from fractions import Fraction
2+
from itertools import islice
23
from urllib.parse import urldefrag, urljoin
34
import re
45

@@ -66,21 +67,13 @@ def items(validator, items, instance, schema):
6667
if not validator.is_type(instance, "array"):
6768
return
6869

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)
7674
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)
8477

8578

8679
def additionalItems(validator, aI, instance, schema):
@@ -448,5 +441,5 @@ def prefixItems(validator, prefixItems, instance, schema):
448441
if not validator.is_type(instance, "array"):
449442
return
450443

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

Comments
 (0)