diff options
author | Kenneth Reitz <me@kennethreitz.org> | 2014-11-30 14:12:43 -0500 |
---|---|---|
committer | Kenneth Reitz <me@kennethreitz.org> | 2014-11-30 14:12:43 -0500 |
commit | 53d02381e22436b6d0757eb305eb1a960f82d361 (patch) | |
tree | e2963e5c106dbd361041ccd948114c376297a2fa | |
parent | 8ae4d02d73dc3506f77a0b139c974097729dffa8 (diff) | |
parent | c8baf881257ff3194879ad79bef81c27007b4dcf (diff) | |
download | python-requests-53d02381e22436b6d0757eb305eb1a960f82d361.tar.gz |
Merge pull request #2349 from sigmavirus24/fix-pickling
Properly serialize RecentlyUsedContainers for cache
-rw-r--r-- | requests/sessions.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/requests/sessions.py b/requests/sessions.py index 4eb374fd..4f306963 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -36,6 +36,8 @@ from .status_codes import codes # formerly defined here, reexposed here for backward compatibility from .models import REDIRECT_STATI +REDIRECT_CACHE_SIZE = 1000 + def merge_setting(request_setting, session_setting, dict_class=OrderedDict): """ @@ -274,7 +276,7 @@ class Session(SessionRedirectMixin): __attrs__ = [ 'headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify', 'cert', 'prefetch', 'adapters', 'stream', 'trust_env', - 'max_redirects', 'redirect_cache' + 'max_redirects', ] def __init__(self): @@ -329,7 +331,7 @@ class Session(SessionRedirectMixin): self.mount('http://', HTTPAdapter()) # Only store 1000 redirects to prevent using infinite memory - self.redirect_cache = RecentlyUsedContainer(1000) + self.redirect_cache = RecentlyUsedContainer(REDIRECT_CACHE_SIZE) def __enter__(self): return self @@ -660,12 +662,19 @@ class Session(SessionRedirectMixin): self.adapters[key] = self.adapters.pop(key) def __getstate__(self): - return dict((attr, getattr(self, attr, None)) for attr in self.__attrs__) + state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__) + state['redirect_cache'] = dict(self.redirect_cache) + return state def __setstate__(self, state): + redirect_cache = state.pop('redirect_cache', {}) for attr, value in state.items(): setattr(self, attr, value) + self.redirect_cache = RecentlyUsedContainer(REDIRECT_CACHE_SIZE) + for redirect, to in redirect_cache.items(): + self.redirect_cache[redirect] = to + def session(): """Returns a :class:`Session` for context-management.""" |