@@ -248,6 +248,7 @@ class OpenAPIV31SchemaValidator(SchemaValidator):
248248
249249 def __init__ (self , registry : "KeywordValidatorRegistry" ):
250250 super ().__init__ (registry )
251+ self ._default_jsonschema_dialect_id : str | None = None
251252 self ._validator_classes_by_dialect : dict [
252253 str , type [Validator ] | None
253254 ] = {}
@@ -283,14 +284,18 @@ def _get_schema_dialect_id(
283284 )
284285 dialect_id = dialect_value
285286 else :
286- jsonschema_dialect_id = self ._get_jsonschema_dialect_id (schema )
287+ jsonschema_dialect_id = (
288+ self ._get_default_jsonschema_dialect_id (schema )
289+ )
287290 schema_to_check = {
288291 ** schema_to_check ,
289292 "$schema" : jsonschema_dialect_id ,
290293 }
291294 dialect_id = jsonschema_dialect_id
292295 else :
293- jsonschema_dialect_id = self ._get_jsonschema_dialect_id (schema )
296+ jsonschema_dialect_id = self ._get_default_jsonschema_dialect_id (
297+ schema
298+ )
294299 schema_to_check = schema_value
295300 dialect_id = jsonschema_dialect_id
296301
@@ -312,14 +317,19 @@ def _get_validator_class_for_dialect(
312317 self ._validator_classes_by_dialect [dialect_id ] = validator_cls
313318 return validator_cls
314319
315- def _get_jsonschema_dialect_id (self , schema : SchemaPath ) -> str :
316- schema_root = self ._get_schema_root (schema )
317- try :
318- return (schema_root // "jsonSchemaDialect" ).read_str ()
319- except KeyError :
320- return self .default_jsonschema_dialect_id
320+ def _get_default_jsonschema_dialect_id (self , schema : SchemaPath ) -> str :
321+ if self ._default_jsonschema_dialect_id is not None :
322+ return self ._default_jsonschema_dialect_id
323+
324+ spec_root = self ._get_spec_root (schema )
325+ dialect_id = (spec_root / "jsonSchemaDialect" ).read_str (
326+ default = OAS31_BASE_DIALECT_URI
327+ )
328+
329+ self ._default_jsonschema_dialect_id = dialect_id
330+ return dialect_id
321331
322- def _get_schema_root (self , schema : SchemaPath ) -> SchemaPath :
332+ def _get_spec_root (self , schema : SchemaPath ) -> SchemaPath :
323333 # jsonschema-path currently has no public API for root traversal.
324334 return schema ._clone_with_parts (())
325335
0 commit comments