diff options
| author | Parker Hancock <633163+parkerhancock@users.noreply.github.com> | 2021-06-14 21:58:56 -0500 |
|---|---|---|
| committer | Parker Hancock <633163+parkerhancock@users.noreply.github.com> | 2021-06-14 21:58:56 -0500 |
| commit | abdffac620cd832119255c31aaf0f05a1cc4f973 (patch) | |
| tree | 820c4ebb3eb40d94ce92021ecc0300189bffa132 /requests_cache/backends/filesystem.py | |
| parent | fc3992b8f9eebc26201d05378fadd214ec2c3fbc (diff) | |
| download | requests-cache-abdffac620cd832119255c31aaf0f05a1cc4f973.tar.gz | |
extirpated 'is_binary' from pipelines
Diffstat (limited to 'requests_cache/backends/filesystem.py')
| -rw-r--r-- | requests_cache/backends/filesystem.py | 17 |
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)) |
