Skip to content

Commit bd68ca3

Browse files
committed
Slightly speed up unevaluatedProperties in the failing case.
When we decide a property isn't evaluated because it fails validation of the unevaluated* schema (which we currently do in an entirely nonideal way anyhow by doing the work *redundantly* in two places), there's no need to build the full list of errors when a property fails validation, it's enough to just know it fails validation. This may change if/when we provide full context on unevaluatedProperties failures, but for now we don't expose that information anyhow.
1 parent b9ce595 commit bd68ca3

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

jsonschema/_legacy_validators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,8 @@ def find_evaluated_item_indexes_by_schema(validator, instance, schema):
276276
for keyword in ["allOf", "oneOf", "anyOf"]:
277277
if keyword in schema:
278278
for subschema in schema[keyword]:
279-
errs = list(validator.descend(instance, subschema))
280-
if not errs:
279+
errs = next(validator.descend(instance, subschema), None)
280+
if errs is None:
281281
evaluated_indexes += find_evaluated_item_indexes_by_schema(
282282
validator, instance, subschema,
283283
)

jsonschema/_utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,8 @@ def find_evaluated_item_indexes_by_schema(validator, instance, schema):
237237
for keyword in ["allOf", "oneOf", "anyOf"]:
238238
if keyword in schema:
239239
for subschema in schema[keyword]:
240-
errs = list(validator.descend(instance, subschema))
241-
if not errs:
240+
errs = next(validator.descend(instance, subschema), None)
241+
if errs is None:
242242
evaluated_indexes += find_evaluated_item_indexes_by_schema(
243243
validator, instance, subschema,
244244
)
@@ -301,8 +301,8 @@ def find_evaluated_property_keys_by_schema(validator, instance, schema):
301301
for keyword in ["allOf", "oneOf", "anyOf"]:
302302
if keyword in schema:
303303
for subschema in schema[keyword]:
304-
errs = list(validator.descend(instance, subschema))
305-
if not errs:
304+
errs = next(validator.descend(instance, subschema), None)
305+
if errs is None:
306306
evaluated_keys += find_evaluated_property_keys_by_schema(
307307
validator, instance, subschema,
308308
)

0 commit comments

Comments
 (0)