diff options
author | Julian Berman <Julian@GrayVines.com> | 2021-08-24 09:47:50 +0100 |
---|---|---|
committer | Julian Berman <Julian@GrayVines.com> | 2021-08-24 09:47:50 +0100 |
commit | 60d689ca25012cc223166407f73348c86d13a1b4 (patch) | |
tree | 9da76c353877f19d1313bdd7a747c9631bf5631a /jsonschema/_validators.py | |
parent | 641e9b8cf898928b4e4257e1e5cda243fc1f1aa7 (diff) | |
download | jsonschema-60d689ca25012cc223166407f73348c86d13a1b4.tar.gz |
And simplify items as well.
Diffstat (limited to 'jsonschema/_validators.py')
-rw-r--r-- | jsonschema/_validators.py | 25 |
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) |