@@ -244,10 +244,9 @@ def __call__(
244244
245245
246246class OpenAPIV31SchemaValidator (SchemaValidator ):
247- default_jsonschema_dialect_id = OAS31_BASE_DIALECT_URI
248-
249247 def __init__ (self , registry : "KeywordValidatorRegistry" ):
250248 super ().__init__ (registry )
249+ self ._default_jsonschema_dialect_id : str | None = None
251250 self ._validator_classes_by_dialect : dict [
252251 str , type [Validator ] | None
253252 ] = {}
@@ -283,14 +282,18 @@ def _get_schema_dialect_id(
283282 )
284283 dialect_id = dialect_value
285284 else :
286- jsonschema_dialect_id = self ._get_jsonschema_dialect_id (schema )
285+ jsonschema_dialect_id = (
286+ self ._get_default_jsonschema_dialect_id (schema )
287+ )
287288 schema_to_check = {
288289 ** schema_to_check ,
289290 "$schema" : jsonschema_dialect_id ,
290291 }
291292 dialect_id = jsonschema_dialect_id
292293 else :
293- jsonschema_dialect_id = self ._get_jsonschema_dialect_id (schema )
294+ jsonschema_dialect_id = self ._get_default_jsonschema_dialect_id (
295+ schema
296+ )
294297 schema_to_check = schema_value
295298 dialect_id = jsonschema_dialect_id
296299
@@ -312,14 +315,19 @@ def _get_validator_class_for_dialect(
312315 self ._validator_classes_by_dialect [dialect_id ] = validator_cls
313316 return validator_cls
314317
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
318+ def _get_default_jsonschema_dialect_id (self , schema : SchemaPath ) -> str :
319+ if self ._default_jsonschema_dialect_id is not None :
320+ return self ._default_jsonschema_dialect_id
321+
322+ spec_root = self ._get_spec_root (schema )
323+ dialect_id = (spec_root / "jsonSchemaDialect" ).read_str (
324+ default = OAS31_BASE_DIALECT_URI
325+ )
326+
327+ self ._default_jsonschema_dialect_id = dialect_id
328+ return dialect_id
321329
322- def _get_schema_root (self , schema : SchemaPath ) -> SchemaPath :
330+ def _get_spec_root (self , schema : SchemaPath ) -> SchemaPath :
323331 # jsonschema-path currently has no public API for root traversal.
324332 return schema ._clone_with_parts (())
325333
0 commit comments