summaryrefslogtreecommitdiff
path: root/requests_cache/backends
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2022-02-15 14:04:39 -0600
committerJordan Cook <jordan.cook@pioneer.com>2022-02-15 14:09:04 -0600
commitb5bac5aae0213b44fe02e362ece9d4ef60ff8793 (patch)
tree88284b25c4d769080ce63bb58e456e46d57745ff /requests_cache/backends
parent43c9287b26cefde75b4e22d974b616f9675e4960 (diff)
downloadrequests-cache-b5bac5aae0213b44fe02e362ece9d4ef60ff8793.tar.gz
Fix serialization in filesystem backend with binary content that is also valid UTF-8
Diffstat (limited to 'requests_cache/backends')
-rw-r--r--requests_cache/backends/filesystem.py16
1 files changed, 4 insertions, 12 deletions
diff --git a/requests_cache/backends/filesystem.py b/requests_cache/backends/filesystem.py
index b5da0df..c94b662 100644
--- a/requests_cache/backends/filesystem.py
+++ b/requests_cache/backends/filesystem.py
@@ -96,7 +96,7 @@ class FileDict(BaseStorage):
super().__init__(**kwargs)
self.cache_dir = get_cache_path(cache_name, use_cache_dir=use_cache_dir, use_temp=use_temp)
self.extension = _get_extension(extension, self.serializer)
- self.is_binary = False
+ self.is_binary = getattr(self.serializer, 'is_binary', False)
makedirs(self.cache_dir, exist_ok=True)
@contextmanager
@@ -114,24 +114,16 @@ class FileDict(BaseStorage):
def __getitem__(self, key):
mode = 'rb' if self.is_binary else 'r'
with self._try_io():
- try:
- with self._path(key).open(mode) as f:
- return self.serializer.loads(f.read())
- except UnicodeDecodeError:
- self.is_binary = True
- return self.__getitem__(key)
+ with self._path(key).open(mode) as f:
+ return self.serializer.loads(f.read())
def __delitem__(self, key):
with self._try_io():
self._path(key).unlink()
def __setitem__(self, key, value):
- 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 self._path(key).open(mode) as f:
+ with self._path(key).open(mode='wb' if self.is_binary else 'w') as f:
f.write(self.serializer.dumps(value))
def __iter__(self):