diff options
| author | Jordan Cook <jordan.cook@pioneer.com> | 2021-05-10 19:25:38 -0500 |
|---|---|---|
| committer | Jordan Cook <jordan.cook@pioneer.com> | 2021-05-26 20:48:16 -0500 |
| commit | 2f3cfbf926e2c99919e7a5b02f4926d5dbd67f24 (patch) | |
| tree | 04dc4232a31aaea8239d382ebdfec7efbad1d5ee /requests_cache/backends | |
| parent | 865d9825b78d4f4571d5b20990c0c498f2d0ab99 (diff) | |
| download | requests-cache-2f3cfbf926e2c99919e7a5b02f4926d5dbd67f24.tar.gz | |
Split out serializers and models into separate classes
Diffstat (limited to 'requests_cache/backends')
| -rw-r--r-- | requests_cache/backends/base.py | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py index ebc0b93..9c4c95f 100644 --- a/requests_cache/backends/base.py +++ b/requests_cache/backends/base.py @@ -9,8 +9,10 @@ from typing import Iterable, Iterator, Tuple, Union import requests from requests.models import PreparedRequest +from ..cache_control import ExpirationTime from ..cache_keys import create_key, url_to_key -from ..response import AnyResponse, CachedResponse, ExpirationTime +from ..models.response import AnyResponse, CachedResponse +from ..serializers import PickleSerializer, SafePickleSerializer # Specific exceptions that may be raised during deserialization DESERIALIZE_ERRORS = (AttributeError, TypeError, ValueError, pickle.PickleError) @@ -83,6 +85,7 @@ class BaseCache: return default except DESERIALIZE_ERRORS as e: logger.error(f'Unable to deserialize response with key {key}: {str(e)}') + logger.debug(e, exc_info=True) return default def delete(self, key: str): @@ -214,8 +217,8 @@ class BaseStorage(MutableMapping, ABC): serializer=None, **kwargs, ): - self._serializer = serializer or self._get_serializer(secret_key, salt) - logger.debug(f'Initializing {type(self).__name__} with serializer: {self._serializer}') + self.serializer = serializer or self._get_serializer(secret_key, salt) + logger.debug(f'Initializing {type(self).__name__} with serializer: {self.serializer}') if not secret_key: level = DEBUG if suppress_warnings else WARNING @@ -223,11 +226,11 @@ class BaseStorage(MutableMapping, ABC): def serialize(self, item: ResponseOrKey) -> bytes: """Serialize a URL or response into bytes""" - return self._serializer.dumps(item) + return self.serializer.dumps(item) def deserialize(self, item: Union[ResponseOrKey, bytes]) -> ResponseOrKey: """Deserialize a cached URL or response""" - return self._serializer.loads(bytes(item)) + return self.serializer.loads(item) @staticmethod def _get_serializer(secret_key, salt): @@ -236,11 +239,9 @@ class BaseStorage(MutableMapping, ABC): """ # Import in function scope to make itsdangerous an optional dependency if secret_key: - from itsdangerous.serializer import Serializer - - return Serializer(secret_key, salt=salt, serializer=pickle) + return SafePickleSerializer(secret_key=secret_key, salt=salt) else: - return pickle + return PickleSerializer() def bulk_delete(self, keys: Iterable[str]): """Delete multiple keys from the cache. Does not raise errors for missing keys. This is a |
