summaryrefslogtreecommitdiff
path: root/requests_cache/backends
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2021-05-10 19:25:38 -0500
committerJordan Cook <jordan.cook@pioneer.com>2021-05-26 20:48:16 -0500
commit2f3cfbf926e2c99919e7a5b02f4926d5dbd67f24 (patch)
tree04dc4232a31aaea8239d382ebdfec7efbad1d5ee /requests_cache/backends
parent865d9825b78d4f4571d5b20990c0c498f2d0ab99 (diff)
downloadrequests-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.py19
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