summaryrefslogtreecommitdiff
path: root/jsonschema/_validators.py
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2021-08-24 09:47:50 +0100
committerJulian Berman <Julian@GrayVines.com>2021-08-24 09:47:50 +0100
commit60d689ca25012cc223166407f73348c86d13a1b4 (patch)
tree9da76c353877f19d1313bdd7a747c9631bf5631a /jsonschema/_validators.py
parent641e9b8cf898928b4e4257e1e5cda243fc1f1aa7 (diff)
downloadjsonschema-60d689ca25012cc223166407f73348c86d13a1b4.tar.gz
And simplify items as well.
Diffstat (limited to 'jsonschema/_validators.py')
-rw-r--r--jsonschema/_validators.py25
1 files changed, 9 insertions, 16 deletions
diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py
index e4cfa35..49f0145 100644
--- a/jsonschema/_validators.py
+++ b/jsonschema/_validators.py
@@ -1,4 +1,5 @@
from fractions import Fraction
+from itertools import islice
from urllib.parse import urldefrag, urljoin
import re
@@ -66,21 +67,13 @@ def items(validator, items, instance, schema):
if not validator.is_type(instance, "array"):
return
- if validator.is_type(items, "boolean") and "prefixItems" in schema:
- if not items:
- got = len(instance)
- maximum = len(schema["prefixItems"])
- if got > maximum:
- message = f"Expected at most {maximum} items, but found {got}"
- yield ValidationError(message)
+ prefix = len(schema.get("prefixItems", []))
+ if items is False and len(instance) > prefix:
+ message = f"Expected at most {prefix} items, but found {len(instance)}"
+ yield ValidationError(message)
else:
- non_prefixed_items = (
- instance[len(schema["prefixItems"]):]
- if "prefixItems" in schema else instance
- )
-
- for index, item in enumerate(non_prefixed_items):
- yield from validator.descend(item, items, path=index)
+ for item in islice(instance, prefix, None):
+ yield from validator.descend(instance=item, schema=items)
def additionalItems(validator, aI, instance, schema):
@@ -448,5 +441,5 @@ def prefixItems(validator, prefixItems, instance, schema):
if not validator.is_type(instance, "array"):
return
- for (index, each), subschema in zip(enumerate(instance), prefixItems):
- yield from validator.descend(each, subschema, schema_path=index)
+ for (index, item), subschema in zip(enumerate(instance), prefixItems):
+ yield from validator.descend(item, subschema, schema_path=index)