mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Don't sanitize filename on Unix when --no-windows-filenames (#9591)
				
					
				
			Closes #4547, Closes #8464 Authored by: pukkandan
This commit is contained in:
		| @@ -266,7 +266,9 @@ class YoutubeDL: | ||||
|     outtmpl_na_placeholder: Placeholder for unavailable meta fields. | ||||
|     restrictfilenames: Do not allow "&" and spaces in file names | ||||
|     trim_file_name:    Limit length of filename (extension excluded) | ||||
|     windowsfilenames:  Force the filenames to be windows compatible | ||||
|     windowsfilenames:  True: Force filenames to be Windows compatible | ||||
|                        False: Sanitize filenames only minimally | ||||
|                        This option has no effect when running on Windows | ||||
|     ignoreerrors:      Do not stop on download/postprocessing errors. | ||||
|                        Can be 'only_download' to ignore only download errors. | ||||
|                        Default is 'only_download' for CLI, but False for API | ||||
| @@ -1192,8 +1194,7 @@ class YoutubeDL: | ||||
| 
 | ||||
|     def prepare_outtmpl(self, outtmpl, info_dict, sanitize=False): | ||||
|         """ Make the outtmpl and info_dict suitable for substitution: ydl.escape_outtmpl(outtmpl) % info_dict | ||||
|         @param sanitize    Whether to sanitize the output as a filename. | ||||
|                            For backward compatibility, a function can also be passed | ||||
|         @param sanitize    Whether to sanitize the output as a filename | ||||
|         """ | ||||
| 
 | ||||
|         info_dict.setdefault('epoch', int(time.time()))  # keep epoch consistent once set | ||||
| @@ -1309,14 +1310,23 @@ class YoutubeDL: | ||||
| 
 | ||||
|         na = self.params.get('outtmpl_na_placeholder', 'NA') | ||||
| 
 | ||||
|         def filename_sanitizer(key, value, restricted=self.params.get('restrictfilenames')): | ||||
|         def filename_sanitizer(key, value, restricted): | ||||
|             return sanitize_filename(str(value), restricted=restricted, is_id=( | ||||
|                 bool(re.search(r'(^|[_.])id(\.|$)', key)) | ||||
|                 if 'filename-sanitization' in self.params['compat_opts'] | ||||
|                 else NO_DEFAULT)) | ||||
| 
 | ||||
|         sanitizer = sanitize if callable(sanitize) else filename_sanitizer | ||||
|         sanitize = bool(sanitize) | ||||
|         if callable(sanitize): | ||||
|             self.deprecation_warning('Passing a callable "sanitize" to YoutubeDL.prepare_outtmpl is deprecated') | ||||
|         elif not sanitize: | ||||
|             pass | ||||
|         elif (sys.platform != 'win32' and not self.params.get('restrictfilenames') | ||||
|                 and self.params.get('windowsfilenames') is False): | ||||
|             def sanitize(key, value): | ||||
|                 return value.replace('/', '\u29F8').replace('\0', '') | ||||
|         else: | ||||
|             def sanitize(key, value): | ||||
|                 return filename_sanitizer(key, value, restricted=self.params.get('restrictfilenames')) | ||||
| 
 | ||||
|         def _dumpjson_default(obj): | ||||
|             if isinstance(obj, (set, LazyList)): | ||||
| @@ -1399,13 +1409,13 @@ class YoutubeDL: | ||||
| 
 | ||||
|             if sanitize: | ||||
|                 # If value is an object, sanitize might convert it to a string | ||||
|                 # So we convert it to repr first | ||||
|                 # So we manually convert it before sanitizing | ||||
|                 if fmt[-1] == 'r': | ||||
|                     value, fmt = repr(value), str_fmt | ||||
|                 elif fmt[-1] == 'a': | ||||
|                     value, fmt = ascii(value), str_fmt | ||||
|                 if fmt[-1] in 'csra': | ||||
|                     value = sanitizer(last_field, value) | ||||
|                     value = sanitize(last_field, value) | ||||
| 
 | ||||
|             key = '{}\0{}'.format(key.replace('%', '%\0'), outer_mobj.group('format')) | ||||
|             TMPL_DICT[key] = value | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan