@@ -233,10 +233,10 @@ class RefResolver(object):
233
233
first resolution
234
234
:argument dict handlers: a mapping from URI schemes to functions that
235
235
should be used to retrieve them
236
- :arguments callable cache_func : a function decorator used to cache
237
- expensive calls. Should support the `functools.lru_cache` interface .
238
- :argument int cache_maxsize: number of items to store in the cache. Set
239
- this to 0 to disable caching. Defaults to 1000 .
236
+ :arguments functools.lru_cache urljoin_cache : a cache that will be used for
237
+ caching the results of joining the resolution scope to subscopes .
238
+ :arguments functools.lru_cache remote_cache: a cache that will be used for
239
+ caching the results of resolved remote URLs .
240
240
241
241
"""
242
242
@@ -247,10 +247,14 @@ def __init__(
247
247
store = (),
248
248
cache_remote = True ,
249
249
handlers = (),
250
- cache_func = lru_cache ,
251
- cache_maxsize = 1000 ,
250
+ urljoin_cache = None ,
251
+ remote_cache = None ,
252
252
):
253
- # This attribute is not used, it is for backwards compatibility
253
+ if urljoin_cache is None :
254
+ urljoin_cache = lru_cache (1024 )(urljoin )
255
+ if remote_cache is None :
256
+ remote_cache = lru_cache (1024 )(self .resolve_from_url )
257
+
254
258
self .referrer = referrer
255
259
self .cache_remote = cache_remote
256
260
self .handlers = dict (handlers )
@@ -263,8 +267,8 @@ def __init__(
263
267
self .store .update (store )
264
268
self .store [base_uri ] = referrer
265
269
266
- self ._urljoin_cache = cache_func ( cache_maxsize )( urljoin )
267
- self ._resolve_cache = cache_func ( cache_maxsize )( self . resolve_from_url )
270
+ self ._urljoin_cache = urljoin_cache
271
+ self ._remote_cache = remote_cache
268
272
269
273
@classmethod
270
274
def from_schema (cls , schema , * args , ** kwargs ):
@@ -280,7 +284,8 @@ def from_schema(cls, schema, *args, **kwargs):
280
284
281
285
def push_scope (self , scope ):
282
286
self ._scopes_stack .append (
283
- self ._urljoin_cache (self .resolution_scope , scope ))
287
+ self ._urljoin_cache (self .resolution_scope , scope ),
288
+ )
284
289
285
290
def pop_scope (self ):
286
291
try :
@@ -328,7 +333,7 @@ def resolving(self, ref):
328
333
329
334
def resolve (self , ref ):
330
335
url = self ._urljoin_cache (self .resolution_scope , ref )
331
- return url , self ._resolve_cache (url )
336
+ return url , self ._remote_cache (url )
332
337
333
338
def resolve_from_url (self , url ):
334
339
url , fragment = urldefrag (url )
0 commit comments