99
1010from ..builtin_schemas import get_builtin_schema
1111from ..formats import FormatOptions , make_format_checker
12+ from ..parsers import ParserSet
1213from ..utils import is_url_ish
1314from .errors import UnsupportedUrlScheme
1415from .readers import HttpSchemaReader , LocalSchemaReader
15- from .resolver import make_ref_resolver
16+ from .resolver import make_reference_registry
1617
1718
1819def _extend_with_default (
@@ -71,6 +72,9 @@ def __init__(
7172 if is_url_ish (self .schemafile ):
7273 self .url_info = urllib .parse .urlparse (self .schemafile )
7374
75+ # setup a parser collection
76+ self ._parsers = ParserSet ()
77+
7478 # setup a schema reader lazily, when needed
7579 self ._reader : LocalSchemaReader | HttpSchemaReader | None = None
7680
@@ -96,8 +100,8 @@ def _get_schema_reader(self) -> LocalSchemaReader | HttpSchemaReader:
96100 f"detected parsed URL had an unrecognized scheme: { self .url_info } "
97101 )
98102
99- def get_schema_ref_base (self ) -> str | None :
100- return self .reader .get_ref_base ()
103+ def get_schema_retrieval_uri (self ) -> str | None :
104+ return self .reader .get_retrieval_uri ()
101105
102106 def get_schema (self ) -> dict [str , t .Any ]:
103107 return self .reader .read_schema ()
@@ -109,19 +113,19 @@ def get_validator(
109113 format_opts : FormatOptions ,
110114 fill_defaults : bool ,
111115 ) -> jsonschema .Validator :
112- schema_uri = self .get_schema_ref_base ()
116+ retrieval_uri = self .get_schema_retrieval_uri ()
113117 schema = self .get_schema ()
114118
115119 schema_dialect = schema .get ("$schema" )
116120
117121 # format checker (which may be None)
118122 format_checker = make_format_checker (format_opts , schema_dialect )
119123
120- # ref resolver which may be built from the schema path
121- # if the location is a URL, there's no change, but if it's a file path
122- # it's made absolute and URI-ized
123- # the resolver should use `$id` if there is one present in the schema
124- ref_resolver = make_ref_resolver ( schema_uri , schema )
124+ # reference resolution
125+ # with support for YAML, TOML, and other formats from the parsers
126+ reference_registry = make_reference_registry (
127+ self . _parsers , retrieval_uri , schema
128+ )
125129
126130 # get the correct validator class and check the schema under its metaschema
127131 validator_cls = jsonschema .validators .validator_for (schema )
@@ -134,7 +138,7 @@ def get_validator(
134138 # now that we know it's safe to try to create the validator instance, do it
135139 validator = validator_cls (
136140 schema ,
137- resolver = ref_resolver ,
141+ registry = reference_registry ,
138142 format_checker = format_checker ,
139143 )
140144 return t .cast (jsonschema .Validator , validator )
@@ -143,8 +147,9 @@ def get_validator(
143147class BuiltinSchemaLoader (SchemaLoader ):
144148 def __init__ (self , schema_name : str ) -> None :
145149 self .schema_name = schema_name
150+ self ._parsers = ParserSet ()
146151
147- def get_schema_ref_base (self ) -> str | None :
152+ def get_schema_retrieval_uri (self ) -> str | None :
148153 return None
149154
150155 def get_schema (self ) -> dict [str , t .Any ]:
0 commit comments