From 33973dc9fa22e47ebd15b42025c4a1284b48ce9c Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Sat, 21 Mar 2015 21:56:50 -0400 Subject: [PATCH] Pass in caches instead of arguments. --- jsonschema/_version.py | 6 +++--- jsonschema/validators.py | 27 ++++++++++++++++----------- version.txt | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/jsonschema/_version.py b/jsonschema/_version.py index ae262cf..1ba07cc 100644 --- a/jsonschema/_version.py +++ b/jsonschema/_version.py @@ -1,5 +1,5 @@ # This file is automatically generated by setup.py. -__version__ = '2.3.0.post131' -__sha__ = 'gfec4647' -__revision__ = 'gfec4647' +__version__ = '2.3.0.post133' +__sha__ = 'g8ebd5bc' +__revision__ = 'g8ebd5bc' diff --git a/jsonschema/validators.py b/jsonschema/validators.py index e6c5aa5..0945949 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -233,10 +233,10 @@ class RefResolver(object): first resolution :argument dict handlers: a mapping from URI schemes to functions that should be used to retrieve them - :arguments callable cache_func: a function decorator used to cache - expensive calls. Should support the `functools.lru_cache` interface. - :argument int cache_maxsize: number of items to store in the cache. Set - this to 0 to disable caching. Defaults to 1000. + :arguments functools.lru_cache urljoin_cache: a cache that will be used for + caching the results of joining the resolution scope to subscopes. + :arguments functools.lru_cache remote_cache: a cache that will be used for + caching the results of resolved remote URLs. """ @@ -247,10 +247,14 @@ class RefResolver(object): store=(), cache_remote=True, handlers=(), - cache_func=lru_cache, - cache_maxsize=1000, + urljoin_cache=None, + remote_cache=None, ): - # This attribute is not used, it is for backwards compatibility + if urljoin_cache is None: + urljoin_cache = lru_cache(1024)(urljoin) + if remote_cache is None: + remote_cache = lru_cache(1024)(self.resolve_from_url) + self.referrer = referrer self.cache_remote = cache_remote self.handlers = dict(handlers) @@ -263,8 +267,8 @@ class RefResolver(object): self.store.update(store) self.store[base_uri] = referrer - self._urljoin_cache = cache_func(cache_maxsize)(urljoin) - self._resolve_cache = cache_func(cache_maxsize)(self.resolve_from_url) + self._urljoin_cache = urljoin_cache + self._remote_cache = remote_cache @classmethod def from_schema(cls, schema, *args, **kwargs): @@ -280,7 +284,8 @@ class RefResolver(object): def push_scope(self, scope): self._scopes_stack.append( - self._urljoin_cache(self.resolution_scope, scope)) + self._urljoin_cache(self.resolution_scope, scope), + ) def pop_scope(self): try: @@ -328,7 +333,7 @@ class RefResolver(object): def resolve(self, ref): url = self._urljoin_cache(self.resolution_scope, ref) - return url, self._resolve_cache(url) + return url, self._remote_cache(url) def resolve_from_url(self, url): url, fragment = urldefrag(url) diff --git a/version.txt b/version.txt index 1d29f07..bab441e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.3.0-131-gfec4647 \ No newline at end of file +v2.3.0-133-g8ebd5bc \ No newline at end of file