@@ -767,22 +767,32 @@ def _finditem(self, schema, key):
767767 yield each
768768 values .extendleft (each .values ())
769769
770- def resolve (self , ref ):
771- """
772- Resolve the given reference.
773- """
774- url = self ._urljoin_cache (self .resolution_scope , ref ).rstrip ("/" )
770+ @lru_cache ()
771+ def _find_subschemas (self ):
772+ return list (self ._finditem (self .referrer , "$id" ))
775773
774+ @lru_cache ()
775+ def _find_in_subschemas (self , url ):
776776 uri , fragment = urldefrag (url )
777-
778- for subschema in self ._finditem (self .referrer , "$id" ):
777+ for subschema in self ._find_subschemas ():
779778 target_uri = self ._urljoin_cache (
780779 self .resolution_scope , subschema ["$id" ],
781780 )
782781 if target_uri .rstrip ("/" ) == uri .rstrip ("/" ):
783782 if fragment :
784783 subschema = self .resolve_fragment (subschema , fragment )
785784 return url , subschema
785+ return None
786+
787+ def resolve (self , ref ):
788+ """
789+ Resolve the given reference.
790+ """
791+ url = self ._urljoin_cache (self .resolution_scope , ref ).rstrip ("/" )
792+
793+ match = self ._find_in_subschemas (url )
794+ if match is not None :
795+ return match
786796
787797 return url , self ._remote_cache (url )
788798
0 commit comments