summaryrefslogtreecommitdiff
path: root/requests_cache/backends/filesystem.py
diff options
context:
space:
mode:
authorParker Hancock <633163+parkerhancock@users.noreply.github.com>2021-06-14 21:58:56 -0500
committerParker Hancock <633163+parkerhancock@users.noreply.github.com>2021-06-14 21:58:56 -0500
commitabdffac620cd832119255c31aaf0f05a1cc4f973 (patch)
tree820c4ebb3eb40d94ce92021ecc0300189bffa132 /requests_cache/backends/filesystem.py
parentfc3992b8f9eebc26201d05378fadd214ec2c3fbc (diff)
downloadrequests-cache-abdffac620cd832119255c31aaf0f05a1cc4f973.tar.gz
extirpated 'is_binary' from pipelines
Diffstat (limited to 'requests_cache/backends/filesystem.py')
-rw-r--r--requests_cache/backends/filesystem.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/requests_cache/backends/filesystem.py b/requests_cache/backends/filesystem.py
index 3c49625..3d9608f 100644
--- a/requests_cache/backends/filesystem.py
+++ b/requests_cache/backends/filesystem.py
@@ -37,6 +37,7 @@ class FileDict(BaseStorage):
super().__init__(**kwargs)
self.cache_dir = _get_cache_dir(cache_name, use_temp)
makedirs(self.cache_dir, exist_ok=True)
+ self.is_binary = False
@contextmanager
def _try_io(self, ignore_errors: bool = False):
@@ -48,17 +49,25 @@ class FileDict(BaseStorage):
raise KeyError(e)
def __getitem__(self, key):
- mode = 'rb' if self.serializer.is_binary else 'r'
+ mode = 'rb' if self.is_binary else 'r'
with self._try_io():
- with open(join(self.cache_dir, str(key)), mode) as f:
- return self.serializer.loads(f.read())
+ try:
+ with open(join(self.cache_dir, str(key)), mode) as f:
+ return self.serializer.loads(f.read())
+ except UnicodeDecodeError:
+ self.is_binary = True
+ with open(join(self.cache_dir, str(key)), 'rb') as f:
+ return self.serializer.loads(f.read())
def __delitem__(self, key):
with self._try_io():
unlink(join(self.cache_dir, str(key)))
def __setitem__(self, key, value):
- mode = 'wb' if self.serializer.is_binary else 'w'
+ serialized_value = self.serializer.dumps(value)
+ if isinstance(serialized_value, bytes):
+ self.is_binary = True
+ mode = 'wb' if self.is_binary else 'w'
with self._try_io():
with open(join(self.cache_dir, str(key)), mode) as f:
f.write(self.serializer.dumps(value))