diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-08-27 07:22:48 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-08-27 07:25:14 +0530 |
commit | 5e01315aa1ad0c56be33cb5b6a4d079068ee7145 (patch) | |
tree | 9f6fd0d299df10585a0c5e1c45fbd2b456e702fa /yt_dlp/cache.py | |
parent | 4e4982ab5b259027b39a6f9013ec96aefce78aa1 (diff) | |
download | hypervideo-pre-5e01315aa1ad0c56be33cb5b6a4d079068ee7145.tar.lz hypervideo-pre-5e01315aa1ad0c56be33cb5b6a4d079068ee7145.tar.xz hypervideo-pre-5e01315aa1ad0c56be33cb5b6a4d079068ee7145.zip |
[cache, extractor/youtube] Invalidate old cache
Diffstat (limited to 'yt_dlp/cache.py')
-rw-r--r-- | yt_dlp/cache.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/yt_dlp/cache.py b/yt_dlp/cache.py index 83351b797..602cb9edb 100644 --- a/yt_dlp/cache.py +++ b/yt_dlp/cache.py @@ -6,7 +6,8 @@ import re import shutil import traceback -from .utils import expand_path, write_json_file +from .utils import expand_path, traverse_obj, version_tuple, write_json_file +from .version import __version__ class Cache: @@ -45,12 +46,20 @@ class Cache: if ose.errno != errno.EEXIST: raise self._ydl.write_debug(f'Saving {section}.{key} to cache') - write_json_file(data, fn) + write_json_file({'yt-dlp_version': __version__, 'data': data}, fn) except Exception: tb = traceback.format_exc() self._ydl.report_warning(f'Writing cache to {fn!r} failed: {tb}') - def load(self, section, key, dtype='json', default=None): + def _validate(self, data, after): + version = traverse_obj(data, 'yt-dlp_version') + if not version: # Backward compatibility + data, version = {'data': data}, '2022.08.19' + if not after or version_tuple(version) > version_tuple(after): + return data['data'] + self._ydl.write_debug(f'Discarding old cache from version {version} (need {after})') + + def load(self, section, key, dtype='json', default=None, *, after=None): assert dtype in ('json',) if not self.enabled: @@ -61,8 +70,8 @@ class Cache: try: with open(cache_fn, encoding='utf-8') as cachef: self._ydl.write_debug(f'Loading {section}.{key} from cache') - return json.load(cachef) - except ValueError: + return self._validate(json.load(cachef), after) + except (ValueError, KeyError): try: file_size = os.path.getsize(cache_fn) except OSError as oe: |