summaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py
diff options
context:
space:
mode:
authorblackhao <13851610112@163.com>2025-08-22 02:51:50 -0500
committerblackhao <13851610112@163.com>2025-08-22 02:51:50 -0500
commit4aab4087dc97906d0b9890035401175cdaab32d4 (patch)
tree4e2e9d88a711ec5b1cfa02e8ac72a55183b99123 /.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py
parentafa8f50d1d21c721dabcb31ad244610946ab65a3 (diff)
2.0
Diffstat (limited to '.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py')
-rw-r--r--.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py b/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py
new file mode 100644
index 0000000..b025c47
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/nested_schemas.py
@@ -0,0 +1,56 @@
+"""
+Validating highly nested schemas shouldn't cause exponential time blowups.
+
+See https://github.com/python-jsonschema/jsonschema/issues/1097.
+"""
+from itertools import cycle
+
+from jsonschema.validators import validator_for
+
+metaschemaish = {
+ "$id": "https://example.com/draft/2020-12/schema/strict",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+
+ "$vocabulary": {
+ "https://json-schema.org/draft/2020-12/vocab/core": True,
+ "https://json-schema.org/draft/2020-12/vocab/applicator": True,
+ "https://json-schema.org/draft/2020-12/vocab/unevaluated": True,
+ "https://json-schema.org/draft/2020-12/vocab/validation": True,
+ "https://json-schema.org/draft/2020-12/vocab/meta-data": True,
+ "https://json-schema.org/draft/2020-12/vocab/format-annotation": True,
+ "https://json-schema.org/draft/2020-12/vocab/content": True,
+ },
+ "$dynamicAnchor": "meta",
+
+ "$ref": "https://json-schema.org/draft/2020-12/schema",
+ "unevaluatedProperties": False,
+}
+
+
+def nested_schema(levels):
+ """
+ Produce a schema which validates deeply nested objects and arrays.
+ """
+
+ names = cycle(["foo", "bar", "baz", "quux", "spam", "eggs"])
+ schema = {"type": "object", "properties": {"ham": {"type": "string"}}}
+ for _, name in zip(range(levels - 1), names):
+ schema = {"type": "object", "properties": {name: schema}}
+ return schema
+
+
+validator = validator_for(metaschemaish)(metaschemaish)
+
+if __name__ == "__main__":
+ from pyperf import Runner
+ runner = Runner()
+
+ not_nested = nested_schema(levels=1)
+ runner.bench_func("not nested", lambda: validator.is_valid(not_nested))
+
+ for levels in range(1, 11, 3):
+ schema = nested_schema(levels=levels)
+ runner.bench_func(
+ f"nested * {levels}",
+ lambda schema=schema: validator.is_valid(schema),
+ )