summaryrefslogtreecommitdiff
path: root/jsonschema/_validators.py
diff options
context:
space:
mode:
authorHarald Nezbeda <hn@nezhar.com>2021-06-16 20:04:36 +0200
committerHarald Nezbeda <hn@nezhar.com>2021-07-19 18:14:31 +0200
commit753c415866986d413a270c8a199225bdacf62ddb (patch)
treef8fc40b3b87db1e1f6860ba2bb787bde0595dc35 /jsonschema/_validators.py
parent0e4eaeb86569b9dfb664efee436573cedc4fa333 (diff)
downloadjsonschema-753c415866986d413a270c8a199225bdacf62ddb.tar.gz
Julian/jsonschema#782: Adapt items to work with prefixItems
Diffstat (limited to 'jsonschema/_validators.py')
-rw-r--r--jsonschema/_validators.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py
index 7b273f4..5a1f56a 100644
--- a/jsonschema/_validators.py
+++ b/jsonschema/_validators.py
@@ -71,12 +71,28 @@ def items(validator, items, instance, schema):
return
if validator.is_type(items, "array"):
+ """
+ Used in in Draft 7 an bellow, probably also useful for legacy schema format
+ """
for (index, item), subschema in zip(enumerate(instance), items):
for error in validator.descend(
item, subschema, path=index, schema_path=index,
):
yield error
+ elif validator.is_type(items, "boolean") and 'prefixItems' in schema:
+ if len(instance) > len(schema['prefixItems']):
+ yield ValidationError("%r has more items than defined in prefixItems" % instance)
+ else:
+ for error in validator.descend(instance, {'prefixItems': schema['prefixItems']}, path='items__prefixItems'):
+ yield error
else:
+ if 'prefixItems' in schema:
+ for error in validator.descend(instance, {'prefixItems': schema['prefixItems']}, path='items__prefixItems'):
+ yield error
+
+ # Remove evaluated prefixItems indexes
+ del instance[0:len(schema['prefixItems'])]
+
for index, item in enumerate(instance):
for error in validator.descend(item, items, path=index):
yield error