summaryrefslogtreecommitdiff
path: root/requests_cache
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook.git@proton.me>2022-10-26 14:42:24 -0500
committerJordan Cook <jordan.cook.git@proton.me>2022-10-28 12:46:53 -0500
commite9e6676913d466532e9220c38f754543e8f5d0e9 (patch)
tree57556541350187cd62f7b4dffe361627ab2c363b /requests_cache
parentb4e270f6b129b75003d754987acea9e2d8670a5e (diff)
downloadrequests-cache-e9e6676913d466532e9220c38f754543e8f5d0e9.tar.gz
Handle errors due to invalid responses in deserialize(), so it applies to other methods besides just get_responses()
Diffstat (limited to 'requests_cache')
-rw-r--r--requests_cache/backends/base.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py
index bc57ca1..825cd55 100644
--- a/requests_cache/backends/base.py
+++ b/requests_cache/backends/base.py
@@ -70,11 +70,7 @@ class BaseCache:
response = self.responses[self.redirects[key]]
response.cache_key = key
return response
- except KeyError:
- return default
- except DESERIALIZE_ERRORS as e:
- logger.error(f'Unable to deserialize response {key}: {str(e)}')
- logger.debug(e, exc_info=True)
+ except (AttributeError, KeyError):
return default
def save_response(self, response: Response, cache_key: str = None, expires: datetime = None):
@@ -394,16 +390,28 @@ class BaseStorage(MutableMapping[KT, VT], ABC):
"""Close any open backend connections"""
def serialize(self, value: VT):
- """Serialize value, if a serializer is available"""
+ """Serialize a value, if a serializer is available"""
if TYPE_CHECKING:
assert hasattr(self.serializer, 'dumps')
return self.serializer.dumps(value) if self.serializer else value
def deserialize(self, value: VT):
- """Deserialize value, if a serializer is available"""
+ """Deserialize a value, if a serializer is available.
+
+ If deserialization fails (usually due to a value saved in an older requests-cache version),
+ ``None`` will be returned.
+ """
+ if not self.serializer:
+ return value
if TYPE_CHECKING:
assert hasattr(self.serializer, 'loads')
- return self.serializer.loads(value) if self.serializer else value
+
+ try:
+ return self.serializer.loads(value)
+ except DESERIALIZE_ERRORS as e:
+ logger.error(f'Unable to deserialize response: {str(e)}')
+ logger.debug(e, exc_info=True)
+ return None
def __str__(self):
return str(list(self.keys()))