Server IP : 92.204.138.22 / Your IP : 18.119.172.85 Web Server : Apache System : Linux ns1009439.ip-92-204-138.us 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64 User : internationaljou ( 1019) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/self/root/var/opt/nydus/ops/jsonschema/benchmarks/ |
Upload File : |
""" 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), )