File tree 2 files changed +39
-9
lines changed
2 files changed +39
-9
lines changed Original file line number Diff line number Diff line change
1
+ """
2
+ An unused schema registry should not cause slower validation.
3
+
4
+ "Unused" here means one where no reference resolution is occurring anyhow.
5
+
6
+ See https://github.com/python-jsonschema/jsonschema/issues/1088.
7
+ """
8
+ from pyperf import Runner
9
+ from referencing import Registry
10
+ from referencing .jsonschema import DRAFT201909
11
+
12
+ from jsonschema import Draft201909Validator
13
+
14
+ registry = Registry ().with_resource (
15
+ "urn:example:foo" ,
16
+ DRAFT201909 .create_resource ({})
17
+ )
18
+
19
+ schema = {"$ref" : "https://json-schema.org/draft/2019-09/schema" }
20
+ instance = {"maxLength" : 4 }
21
+
22
+ no_registry = Draft201909Validator (schema )
23
+ with_useless_registry = Draft201909Validator (schema , registry = registry )
24
+
25
+ if __name__ == "__main__" :
26
+ runner = Runner ()
27
+
28
+ runner .bench_func (
29
+ "no registry" ,
30
+ lambda : no_registry .is_valid (instance ),
31
+ )
32
+ runner .bench_func (
33
+ "useless registry" ,
34
+ lambda : with_useless_registry .is_valid (instance ),
35
+ )
Original file line number Diff line number Diff line change @@ -224,12 +224,7 @@ class Validator:
224
224
format_checker : _format .FormatChecker | None = field (default = None )
225
225
# TODO: include new meta-schemas added at runtime
226
226
_registry : referencing .jsonschema .SchemaRegistry = field (
227
- default = _DEFAULT_REGISTRY ,
228
- converter = lambda value : (
229
- _DEFAULT_REGISTRY
230
- if value is _DEFAULT_REGISTRY
231
- else SPECIFICATIONS .combine (value )
232
- ),
227
+ default = referencing .Registry (),
233
228
kw_only = True ,
234
229
repr = False ,
235
230
)
@@ -274,9 +269,9 @@ def evolve(self, **changes):
274
269
275
270
def __attrs_post_init__ (self ):
276
271
if self ._resolver is None :
277
- self . _resolver = self ._registry . resolver_with_root (
278
- resource = specification .create_resource (self .schema ),
279
- )
272
+ registry = _DEFAULT_REGISTRY . combine ( self ._registry )
273
+ resource = specification .create_resource (self .schema )
274
+ self . _resolver = registry . resolver_with_root ( resource )
280
275
281
276
@classmethod
282
277
def check_schema (cls , schema , format_checker = _UNSET ):
You can’t perform that action at this time.
0 commit comments