diff options
| author | Jordan Cook <jordan.cook@pioneer.com> | 2022-02-15 14:04:39 -0600 |
|---|---|---|
| committer | Jordan Cook <jordan.cook@pioneer.com> | 2022-02-15 14:09:04 -0600 |
| commit | b5bac5aae0213b44fe02e362ece9d4ef60ff8793 (patch) | |
| tree | 88284b25c4d769080ce63bb58e456e46d57745ff /requests_cache/backends | |
| parent | 43c9287b26cefde75b4e22d974b616f9675e4960 (diff) | |
| download | requests-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.py | 16 |
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): |
