diff options
author | Harald Nezbeda <hn@nezhar.com> | 2021-06-16 20:04:36 +0200 |
---|---|---|
committer | Harald Nezbeda <hn@nezhar.com> | 2021-07-19 18:14:31 +0200 |
commit | 753c415866986d413a270c8a199225bdacf62ddb (patch) | |
tree | f8fc40b3b87db1e1f6860ba2bb787bde0595dc35 /jsonschema/_validators.py | |
parent | 0e4eaeb86569b9dfb664efee436573cedc4fa333 (diff) | |
download | jsonschema-753c415866986d413a270c8a199225bdacf62ddb.tar.gz |
Julian/jsonschema#782: Adapt items to work with prefixItems
Diffstat (limited to 'jsonschema/_validators.py')
-rw-r--r-- | jsonschema/_validators.py | 16 |
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 |