@@ -83,34 +83,33 @@ def iter_errors(self, instance, _schema=None):
83
83
scope = _schema .get (u"id" )
84
84
if scope :
85
85
self .resolver .push_scope (scope )
86
-
87
-
88
- ref = _schema .get (u"$ref" )
89
- if ref is None :
90
- validators = iteritems (_schema )
91
- else :
92
- validators = [(u"$ref" , ref )]
93
-
94
- for k , v in validators :
95
- validator = self .VALIDATORS .get (k )
96
- if validator is None :
97
- continue
98
-
99
- errors = validator (self , v , instance , _schema ) or ()
100
- for error in errors :
101
- # set details if not already set by the called fn
102
- error ._set (
103
- validator = k ,
104
- validator_value = v ,
105
- instance = instance ,
106
- schema = _schema ,
107
- )
108
- if k != u"$ref" :
109
- error .schema_path .appendleft (k )
110
- yield error
111
-
112
- if scope :
113
- self .resolver .pop_scope ()
86
+ try :
87
+ ref = _schema .get (u"$ref" )
88
+ if ref is None :
89
+ validators = iteritems (_schema )
90
+ else :
91
+ validators = [(u"$ref" , ref )]
92
+
93
+ for k , v in validators :
94
+ validator = self .VALIDATORS .get (k )
95
+ if validator is None :
96
+ continue
97
+
98
+ errors = validator (self , v , instance , _schema ) or ()
99
+ for error in errors :
100
+ # set details if not already set by the called fn
101
+ error ._set (
102
+ validator = k ,
103
+ validator_value = v ,
104
+ instance = instance ,
105
+ schema = _schema ,
106
+ )
107
+ if k != u"$ref" :
108
+ error .schema_path .appendleft (k )
109
+ yield error
110
+ finally :
111
+ if scope :
112
+ self .resolver .pop_scope ()
114
113
115
114
def descend (self , instance , schema , path = None , schema_path = None ):
116
115
for error in self .iter_errors (instance , schema ):
@@ -250,7 +249,7 @@ def __init__(
250
249
self .handlers = dict (handlers )
251
250
252
251
253
- self .old_scopes = []
252
+ self .scopes_stack = []
254
253
self .store = _utils .URIDict (
255
254
(id , validator .META_SCHEMA ) ## IDs assumed pure urls (no fragments).
256
255
for id , validator in iteritems (meta_schemas )
@@ -272,7 +271,7 @@ def from_schema(cls, schema, *args, **kwargs):
272
271
273
272
def push_scope (self , scope , is_defragged = False ):
274
273
old_scope = self .resolution_scope
275
- self .old_scopes .append (old_scope )
274
+ self .scopes_stack .append (old_scope )
276
275
if not is_defragged :
277
276
scope = urldefrag (scope )
278
277
self .resolution_scope = DefragResult (
@@ -282,7 +281,7 @@ def push_scope(self, scope, is_defragged=False):
282
281
)
283
282
284
283
def pop_scope (self ):
285
- self .resolution_scope = self .old_scopes .pop ()
284
+ self .resolution_scope = self .scopes_stack .pop ()
286
285
287
286
@contextlib .contextmanager
288
287
def resolving (self , ref ):
@@ -309,11 +308,11 @@ def resolving(self, ref):
309
308
310
309
uri = DefragResult (url , ref .fragment )
311
310
old_base_uri , self .base_uri = self .base_uri , uri
311
+ self .push_scope (uri , is_defragged = True )
312
312
try :
313
- self .push_scope (uri , is_defragged = True )
314
313
yield self .resolve_fragment (document , ref .fragment )
315
- self .pop_scope ()
316
314
finally :
315
+ self .pop_scope ()
317
316
self .base_uri = old_base_uri
318
317
319
318
def resolve_fragment (self , document , fragment ):
0 commit comments