mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-25 03:32:05 +00:00
Keep video IDs verbatim if possible (Closes #571)
This commit is contained in:
parent
e575b6821e
commit
796173d08b
3 changed files with 21 additions and 11 deletions
|
@ -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,14 +338,15 @@ def sanitize_filename(s, restricted=False):
|
||||||
return char
|
return char
|
||||||
|
|
||||||
result = u''.join(map(replace_insane, s))
|
result = u''.join(map(replace_insane, s))
|
||||||
while '__' in result:
|
if not is_id:
|
||||||
result = result.replace('__', '_')
|
while '__' in result:
|
||||||
result = result.strip('_')
|
result = result.replace('__', '_')
|
||||||
# Common case of "Foreign band name - English song title"
|
result = result.strip('_')
|
||||||
if restricted and result.startswith('-_'):
|
# Common case of "Foreign band name - English song title"
|
||||||
result = result[2:]
|
if restricted and result.startswith('-_'):
|
||||||
if not result:
|
result = result[2:]
|
||||||
result = '_'
|
if not result:
|
||||||
|
result = '_'
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def orderedSet(iterable):
|
def orderedSet(iterable):
|
||||||
|
|
Loading…
Reference in a new issue