]> jfr.im git - yt-dlp.git/commitdiff
[outtmpl] Fix bug in expanding environment variables
authorpukkandan <redacted>
Tue, 12 Oct 2021 12:04:24 +0000 (17:34 +0530)
committerpukkandan <redacted>
Tue, 12 Oct 2021 22:44:11 +0000 (04:14 +0530)
test/test_YoutubeDL.py
yt_dlp/YoutubeDL.py

index 06963f7a8e014352b5c7bab24cfd9a8ce5615d45..bd2d752e2571de8f8890a54402ddc8d5a3f43074 100644 (file)
@@ -817,6 +817,12 @@ def gen():
         compat_setenv('__yt_dlp_var', 'expanded')
         envvar = '%__yt_dlp_var%' if compat_os_name == 'nt' else '$__yt_dlp_var'
         test(envvar, (envvar, 'expanded'))
+        if compat_os_name == 'nt':
+            test('%s%', ('%s%', '%s%'))
+            compat_setenv('s', 'expanded')
+            test('%s%', ('%s%', 'expanded'))  # %s% should be expanded before escaping %s
+            compat_setenv('(test)s', 'expanded')
+            test('%(test)s%', ('NA%', 'expanded'))  # Environment should take priority over template
 
         # Path expansion and escaping
         test('Hello %(title1)s', 'Hello $PATH')
index 1afe17639cc2ded4bd3b86d9a46a8055e5d7d7d7..9d91d72ec87af5db71b37d4c90328f255d10ff15 100644 (file)
@@ -1034,7 +1034,7 @@ def _dumpjson_default(obj):
 
         def create_key(outer_mobj):
             if not outer_mobj.group('has_key'):
-                return f'%{outer_mobj.group(0)}'
+                return outer_mobj.group(0)
             key = outer_mobj.group('key')
             mobj = re.match(INTERNAL_FORMAT_RE, key)
             initial_field = mobj.group('fields').split('.')[-1] if mobj else ''
@@ -1105,10 +1105,8 @@ def _prepare_filename(self, info_dict, tmpl_type='default'):
                 compat_str(v),
                 restricted=self.params.get('restrictfilenames'),
                 is_id=(k == 'id' or k.endswith('_id')))
-            outtmpl = self.outtmpl_dict.get(tmpl_type, self.outtmpl_dict['default'])
-            outtmpl, template_dict = self.prepare_outtmpl(outtmpl, info_dict, sanitize)
-            outtmpl = self.escape_outtmpl(self._outtmpl_expandpath(outtmpl))
-            filename = outtmpl % template_dict
+            outtmpl = self._outtmpl_expandpath(self.outtmpl_dict.get(tmpl_type, self.outtmpl_dict['default']))
+            filename = self.evaluate_outtmpl(outtmpl, info_dict, sanitize)
 
             force_ext = OUTTMPL_TYPES.get(tmpl_type)
             if filename and force_ext is not None: