From 60d689ca25012cc223166407f73348c86d13a1b4 Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Tue, 24 Aug 2021 09:47:50 +0100 Subject: And simplify items as well. --- jsonschema/_validators.py | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) (limited to 'jsonschema/_validators.py') 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) -- cgit v1.2.1