diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index e77597d3c8..0e1ab3a4a1 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -735,6 +735,11 @@ def fname(templ): ydl = YoutubeDL(params) return ydl.prepare_filename(self.outtmpl_info) + self.assertEqual(fname('%(height)06d.%(ext)s'), '001080.mp4') + self.assertEqual(fname('%(foo|)s-%(bar|)s.%(ext)s'), '-.mp4') + # self.assertEqual(fname('%(foo|)s.%(ext)s'), '_.mp4') # fixme + # self.assertEqual(fname('%(foo|)s'), '_') # fixme + self.assertEqual(fname('%%'), '%') self.assertEqual(fname('%%%%'), '%%') self.assertEqual(fname('%%(width)06d.%(ext)s'), '%(width)06d.mp4') @@ -746,7 +751,7 @@ def fname(templ): self.assertEqual(fname('Hello %(title2)s'), 'Hello %PATH%') self.assertEqual(fname('%(title3)s'), 'foo_bar_test') - self.assertEqual(fname('%(formats.0)s'), "{'id' - 'id1'}") + self.assertEqual(fname('%(formats.0) 15s'), " {'id' - 'id1'}") self.assertEqual(fname('%(id)r %(height)r'), "'1234' 1080") self.assertEqual(fname('%(formats.0)r'), "{'id' - 'id1'}") diff --git a/test/test_utils.py b/test/test_utils.py index 04d355b4fb..9ff13a369b 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -126,6 +126,7 @@ def test_timeconvert(self): self.assertTrue(timeconvert('bougrg') is None) def test_sanitize_filename(self): + self.assertEqual(sanitize_filename(''), '') self.assertEqual(sanitize_filename('abc'), 'abc') self.assertEqual(sanitize_filename('abc_d-e'), 'abc_d-e') diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index ad96cebcd8..72fc9ad52d 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -936,7 +936,8 @@ def create_key(outer_mobj): # If value is an object, sanitize might convert it to a string # So we convert it to repr first value, fmt = repr(value), '%ss' % fmt[:-1] - value = sanitize(key, value) + if fmt[-1] in 'csr': + value = sanitize(key, value) tmpl_dict[key] = value return '%({key}){fmt}'.format(key=key, fmt=fmt) diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py index 6737c1965e..96f41ddd41 100644 --- a/yt_dlp/utils.py +++ b/yt_dlp/utils.py @@ -2107,6 +2107,8 @@ def replace_insane(char): return '_' return char + if s == '': + return '' # Handle timestamps s = re.sub(r'[0-9]+(?::[0-9]+)+', lambda m: m.group(0).replace(':', '_'), s) result = ''.join(map(replace_insane, s))