Skip to content

Commit 27d3608

Browse files
authored
Merge pull request #1075 from ikonst/2023-03-27-unevaluatedProperties-do-not-validate
Don't evaluate properties twice on behalf of `unevaluatedProperties` validation
2 parents cf1f6b0 + 1d5e77c commit 27d3608

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

jsonschema/_utils.py

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -275,26 +275,19 @@ def find_evaluated_property_keys_by_schema(validator, instance, schema):
275275
"properties", "additionalProperties", "unevaluatedProperties",
276276
]:
277277
if keyword in schema:
278-
if validator.is_type(schema[keyword], "boolean"):
279-
for property, value in instance.items():
280-
if validator.evolve(schema=schema[keyword]).is_valid(
281-
{property: value},
282-
):
283-
evaluated_keys.append(property)
278+
schema_value = schema[keyword]
279+
if validator.is_type(schema_value, "boolean") and schema_value:
280+
evaluated_keys += instance.keys()
284281

285-
if validator.is_type(schema[keyword], "object"):
286-
for property, subschema in schema[keyword].items():
287-
if property in instance and validator.evolve(
288-
schema=subschema,
289-
).is_valid(instance[property]):
282+
elif validator.is_type(schema_value, "object"):
283+
for property in schema_value:
284+
if property in instance:
290285
evaluated_keys.append(property)
291286

292287
if "patternProperties" in schema:
293-
for property, value in instance.items():
294-
for pattern, _ in schema["patternProperties"].items():
295-
if re.search(pattern, property) and validator.evolve(
296-
schema=schema["patternProperties"],
297-
).is_valid({property: value}):
288+
for property in instance:
289+
for pattern in schema["patternProperties"]:
290+
if re.search(pattern, property):
298291
evaluated_keys.append(property)
299292

300293
if "dependentSchemas" in schema:

0 commit comments

Comments
 (0)