mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Keep video IDs verbatim if possible (Closes #571)
This commit is contained in:
		| @@ -79,6 +79,11 @@ class TestUtil(unittest.TestCase): | |||||||
|         self.assertTrue(sanitize_filename('-', restricted=True) != '') |         self.assertTrue(sanitize_filename('-', restricted=True) != '') | ||||||
|         self.assertTrue(sanitize_filename(':', restricted=True) != '') |         self.assertTrue(sanitize_filename(':', restricted=True) != '') | ||||||
|  |  | ||||||
|  |     def test_sanitize_ids(self): | ||||||
|  |         self.assertEquals(sanitize_filename('_n_cd26wFpw', is_id=True), '_n_cd26wFpw') | ||||||
|  |         self.assertEquals(sanitize_filename('_BD_eEpuzXw', is_id=True), '_BD_eEpuzXw') | ||||||
|  |         self.assertEquals(sanitize_filename('N0Y__7-UOdI', is_id=True), 'N0Y__7-UOdI') | ||||||
|  |  | ||||||
|     def test_ordered_set(self): |     def test_ordered_set(self): | ||||||
|         self.assertEqual(orderedSet([1, 1, 2, 3, 4, 4, 5, 6, 7, 3, 5]), [1, 2, 3, 4, 5, 6, 7]) |         self.assertEqual(orderedSet([1, 1, 2, 3, 4, 4, 5, 6, 7, 3, 5]), [1, 2, 3, 4, 5, 6, 7]) | ||||||
|         self.assertEqual(orderedSet([]), []) |         self.assertEqual(orderedSet([]), []) | ||||||
|   | |||||||
| @@ -334,8 +334,11 @@ class FileDownloader(object): | |||||||
|             template_dict['epoch'] = int(time.time()) |             template_dict['epoch'] = int(time.time()) | ||||||
|             template_dict['autonumber'] = u'%05d' % self._num_downloads |             template_dict['autonumber'] = u'%05d' % self._num_downloads | ||||||
|  |  | ||||||
|             template_dict = dict((key, u'NA' if val is None else val) for key, val in template_dict.items()) |             sanitize = lambda k,v: sanitize_filename( | ||||||
|             template_dict = dict((k, sanitize_filename(compat_str(v), self.params.get('restrictfilenames'))) for k,v in template_dict.items()) |                 u'NA' if v is None else compat_str(v), | ||||||
|  |                 restricted=self.params.get('restrictfilenames'), | ||||||
|  |                 is_id=(k==u'id')) | ||||||
|  |             template_dict = dict((k, sanitize(k, v)) for k,v in template_dict.items()) | ||||||
|  |  | ||||||
|             filename = self.params['outtmpl'] % template_dict |             filename = self.params['outtmpl'] % template_dict | ||||||
|             return filename |             return filename | ||||||
|   | |||||||
| @@ -317,9 +317,10 @@ def timeconvert(timestr): | |||||||
|         timestamp = email.utils.mktime_tz(timetuple) |         timestamp = email.utils.mktime_tz(timetuple) | ||||||
|     return timestamp |     return timestamp | ||||||
|  |  | ||||||
| def sanitize_filename(s, restricted=False): | def sanitize_filename(s, restricted=False, is_id=False): | ||||||
|     """Sanitizes a string so it could be used as part of a filename. |     """Sanitizes a string so it could be used as part of a filename. | ||||||
|     If restricted is set, use a stricter subset of allowed characters. |     If restricted is set, use a stricter subset of allowed characters. | ||||||
|  |     Set is_id if this is not an arbitrary string, but an ID that should be kept if possible | ||||||
|     """ |     """ | ||||||
|     def replace_insane(char): |     def replace_insane(char): | ||||||
|         if char == '?' or ord(char) < 32 or ord(char) == 127: |         if char == '?' or ord(char) < 32 or ord(char) == 127: | ||||||
| @@ -337,6 +338,7 @@ def sanitize_filename(s, restricted=False): | |||||||
|         return char |         return char | ||||||
|  |  | ||||||
|     result = u''.join(map(replace_insane, s)) |     result = u''.join(map(replace_insane, s)) | ||||||
|  |     if not is_id: | ||||||
|         while '__' in result: |         while '__' in result: | ||||||
|             result = result.replace('__', '_') |             result = result.replace('__', '_') | ||||||
|         result = result.strip('_') |         result = result.strip('_') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister