File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -144,10 +144,11 @@ def resolve(
144144
145145 def get_resolved (self , parts : Sequence [LookupKey ]) -> Resolved [LookupNode ]:
146146 resolved = self ._get_resolved (self .node , parts , resolver = self .resolver )
147- self .resolver = self .resolver ._evolve (
148- self .resolver ._base_uri ,
149- registry = resolved .resolver ._registry ,
150- )
147+ if resolved .resolver ._registry is not self .resolver ._registry :
148+ self .resolver = self .resolver ._evolve (
149+ self .resolver ._base_uri ,
150+ registry = resolved .resolver ._registry ,
151+ )
151152 return resolved
152153
153154 @classmethod
Original file line number Diff line number Diff line change @@ -159,3 +159,32 @@ def test_dereferences(self):
159159 with pytest .raises (KeyError ):
160160 accessor .require_child (["one" ], "missing" )
161161 retrieve .assert_called_once_with ("x://testref" )
162+
163+
164+ class TestSchemaAccessorResolverEvolution :
165+ def test_does_not_evolve_resolver_when_registry_unchanged (self ):
166+ accessor = SchemaAccessor .from_schema ({"a" : {"b" : 1 }})
167+ initial_resolver = accessor .resolver
168+
169+ assert accessor .read (["a" , "b" ]) == 1
170+ assert accessor .resolver is initial_resolver
171+
172+ def test_evolves_once_when_registry_changes (self ):
173+ retrieve = Mock (return_value = {"value" : "tested" })
174+ accessor = SchemaAccessor .from_schema (
175+ {
176+ "one" : {
177+ "$ref" : "x://testref" ,
178+ },
179+ },
180+ handlers = {"x" : retrieve },
181+ )
182+ initial_resolver = accessor .resolver
183+
184+ assert accessor .read (["one" , "value" ]) == "tested"
185+ evolved_resolver = accessor .resolver
186+ assert evolved_resolver is not initial_resolver
187+
188+ assert accessor .read (["one" , "value" ]) == "tested"
189+ assert accessor .resolver is evolved_resolver
190+ retrieve .assert_called_once_with ("x://testref" )
You can’t perform that action at this time.
0 commit comments