diff options
author | Jordan Cook <jordan.cook.git@proton.me> | 2022-10-26 14:42:24 -0500 |
---|---|---|
committer | Jordan Cook <jordan.cook.git@proton.me> | 2022-10-28 12:46:53 -0500 |
commit | e9e6676913d466532e9220c38f754543e8f5d0e9 (patch) | |
tree | 57556541350187cd62f7b4dffe361627ab2c363b /requests_cache | |
parent | b4e270f6b129b75003d754987acea9e2d8670a5e (diff) | |
download | requests-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.py | 24 |
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())) |