@@ -731,30 +731,23 @@ def _finditem(self, schema, key):
731
731
732
732
return results
733
733
734
- def resolve_local (self , url , schema ):
734
+ def resolve (self , ref ):
735
735
"""
736
- Resolve the given reference within the schema
736
+ Resolve the given reference.
737
737
"""
738
+ url = self ._urljoin_cache (self .resolution_scope , ref ).rstrip ("/" )
739
+
738
740
uri , fragment = urldefrag (url )
739
741
740
- for subschema in self ._finditem (schema , "$id" ):
742
+ for subschema in self ._finditem (self . referrer , "$id" ):
741
743
target_uri = self ._urljoin_cache (
742
744
self .resolution_scope , subschema ["$id" ],
743
745
)
744
746
if target_uri .rstrip ("/" ) == uri .rstrip ("/" ):
745
747
if fragment :
746
748
subschema = self .resolve_fragment (subschema , fragment )
747
- return subschema
749
+ return url , subschema
748
750
749
- def resolve (self , ref ):
750
- """
751
- Resolve the given reference.
752
- """
753
- url = self ._urljoin_cache (self .resolution_scope , ref ).rstrip ("/" )
754
- local_resolve = self .resolve_local (url , self .referrer )
755
-
756
- if local_resolve :
757
- return url , local_resolve
758
751
return url , self ._remote_cache (url )
759
752
760
753
def resolve_from_url (self , url ):
@@ -789,11 +782,13 @@ def resolve_fragment(self, document, fragment):
789
782
790
783
fragment = fragment .lstrip ("/" )
791
784
792
- if fragment :
793
- for keyword in ["$anchor" , "$dynamicAnchor" ]:
794
- for subschema in self ._finditem (document , keyword ):
795
- if fragment == subschema [keyword ]:
796
- return subschema
785
+ if not fragment :
786
+ return document
787
+
788
+ for keyword in ["$anchor" , "$dynamicAnchor" ]:
789
+ for subschema in self ._finditem (document , keyword ):
790
+ if fragment == subschema [keyword ]:
791
+ return subschema
797
792
798
793
# Resolve via path
799
794
parts = unquote (fragment ).split ("/" ) if fragment else []
0 commit comments