diff options
| author | Jordan Cook <jordan.cook@pioneer.com> | 2021-03-31 20:27:59 -0500 |
|---|---|---|
| committer | Jordan Cook <jordan.cook@pioneer.com> | 2021-03-31 20:32:23 -0500 |
| commit | d5a40677cc4754f1224f3afbc266adb1caa5c37b (patch) | |
| tree | 283cd58427fe2e783d85eb976ce374ed255e0a71 /requests_cache | |
| parent | bf8953ed5794e07322b679d14fd78069659f9046 (diff) | |
| download | requests-cache-d5a40677cc4754f1224f3afbc266adb1caa5c37b.tar.gz | |
Rename 'add_key_mapping' to 'save_redirect' and take a request instead of a cache key
Diffstat (limited to 'requests_cache')
| -rw-r--r-- | requests_cache/backends/base.py | 13 | ||||
| -rw-r--r-- | requests_cache/cache_keys.py | 8 | ||||
| -rw-r--r-- | requests_cache/core.py | 6 |
3 files changed, 14 insertions, 13 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py index 09e24c7..4f34fa2 100644 --- a/requests_cache/backends/base.py +++ b/requests_cache/backends/base.py @@ -6,6 +6,7 @@ from logging import getLogger from typing import Iterable, List, Union import requests +from requests.models import PreparedRequest from ..cache_keys import create_key, url_to_key from ..response import AnyResponse, CachedResponse, ExpirationTime @@ -41,16 +42,16 @@ class BaseCache: """ self.responses[key] = CachedResponse(response, expire_after=expire_after) - def add_key_mapping(self, new_key: str, key_to_response: str): + def save_redirect(self, request: PreparedRequest, response_key: str): """ - Adds mapping of `new_key` to `key_to_response` to make it possible to - associate many keys with single response + Map a redirect request to a response. This makes it possible to associate many keys with a + single response. Args: - new_key: New resource key (e.g. url from redirect) - key_to_response: Key which can be found in :attr:`responses` + request: Request object for redirect URL + response_key: Cache key which can be found in ``responses`` """ - self.redirects[new_key] = key_to_response + self.redirects[self.create_key(request)] = response_key def get_response(self, key: str, default=None) -> CachedResponse: """Retrieves response for `key` if it's stored in cache, otherwise returns `default` diff --git a/requests_cache/cache_keys.py b/requests_cache/cache_keys.py index 71988a9..951e192 100644 --- a/requests_cache/cache_keys.py +++ b/requests_cache/cache_keys.py @@ -26,10 +26,10 @@ def create_key( body = remove_ignored_body_params(request, ignored_params) if body: key.update(_encode(body)) - else: - if include_get_headers and request.headers != DEFAULT_HEADERS: - for name, value in normalize_dict(request.headers).items(): - key.update(_encode(f'{name}={value}')) + if include_get_headers and request.headers != DEFAULT_HEADERS: + for name, value in normalize_dict(request.headers).items(): + key.update(_encode(f'{name}={value}')) + return key.hexdigest() diff --git a/requests_cache/core.py b/requests_cache/core.py index ebfa3e7..c17425d 100644 --- a/requests_cache/core.py +++ b/requests_cache/core.py @@ -98,15 +98,15 @@ class CacheMixin: return response # If the request has been filtered out, delete previously cached response if it exists - main_key = self.cache.create_key(response.request) + cache_key = self.cache.create_key(response.request) if not response.from_cache and not self.filter_fn(response): logger.info(f'Deleting filtered response for URL: {response.url}') - self.cache.delete(main_key) + self.cache.delete(cache_key) return response # Cache redirect history for r in response.history: - self.cache.add_key_mapping(self.cache.create_key(r.request), main_key) + self.cache.save_redirect(r.request, cache_key) return response def send(self, request: PreparedRequest, **kwargs) -> AnyResponse: |
