Browse Source

[outtmpl] Fix some minor bugs

Closes #7164
pukkandan 1 year ago
parent
commit
ebe1b4e34f
3 changed files with 7 additions and 7 deletions
  1. 1 1
      test/test_YoutubeDL.py
  2. 5 5
      yt_dlp/YoutubeDL.py
  3. 1 1
      yt_dlp/utils/_utils.py

+ 1 - 1
test/test_YoutubeDL.py

@@ -755,7 +755,7 @@ class TestYoutubeDL(unittest.TestCase):
         test('%(id)d %(id)r', "1234 '1234'")
         test('%(id)r %(height)r', "'1234' 1080")
         test('%(ext)s-%(ext|def)d', 'mp4-def')
-        test('%(width|0)04d', '0000')
+        test('%(width|0)04d', '0')
         test('a%(width|b)d', 'ab', outtmpl_na_placeholder='none')
 
         FORMATS = self.outtmpl_info['formats']

+ 5 - 5
yt_dlp/YoutubeDL.py

@@ -1286,17 +1286,17 @@ class YoutubeDL:
             if fmt == 's' and value is not None and key in field_size_compat_map.keys():
                 fmt = f'0{field_size_compat_map[key]:d}d'
 
-            if value is None:
-                value = default
-            elif replacement is not None:
+            if None not in (value, replacement):
                 try:
                     value = replacement_formatter.format(replacement, value)
                 except ValueError:
-                    value = na
+                    value, default = None, na
 
             flags = outer_mobj.group('conversion') or ''
             str_fmt = f'{fmt[:-1]}s'
-            if fmt[-1] == 'l':  # list
+            if value is None:
+                value, fmt = default, 's'
+            elif fmt[-1] == 'l':  # list
                 delim = '\n' if '#' in flags else ', '
                 value, fmt = delim.join(map(str, variadic(value, allowed_types=(str, bytes)))), str_fmt
             elif fmt[-1] == 'j':  # json

+ 1 - 1
yt_dlp/utils/_utils.py

@@ -3302,7 +3302,7 @@ STR_FORMAT_RE_TMPL = r'''(?x)
 '''
 
 
-STR_FORMAT_TYPES = 'diouxXeEfFgGcrs'
+STR_FORMAT_TYPES = 'diouxXeEfFgGcrsa'
 
 
 def limit_length(s, length):