mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[cache, extractor/youtube] Invalidate old cache
This commit is contained in:
		| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan