[outtmpl] Fix replacement/default when used with alternate
This commit is contained in:
parent
6db9c4d57d
commit
34baa9fdf0
2 changed files with 8 additions and 5 deletions
|
@ -818,6 +818,8 @@ class TestYoutubeDL(unittest.TestCase):
|
||||||
test('%(id&foo)s.bar', 'foo.bar')
|
test('%(id&foo)s.bar', 'foo.bar')
|
||||||
test('%(title&foo)s.bar', 'NA.bar')
|
test('%(title&foo)s.bar', 'NA.bar')
|
||||||
test('%(title&foo|baz)s.bar', 'baz.bar')
|
test('%(title&foo|baz)s.bar', 'baz.bar')
|
||||||
|
test('%(x,id&foo|baz)s.bar', 'foo.bar')
|
||||||
|
test('%(x,title&foo|baz)s.bar', 'baz.bar')
|
||||||
|
|
||||||
# Laziness
|
# Laziness
|
||||||
def gen():
|
def gen():
|
||||||
|
|
|
@ -1099,10 +1099,11 @@ class YoutubeDL(object):
|
||||||
(?P<fields>{field})
|
(?P<fields>{field})
|
||||||
(?P<maths>(?:{math_op}{math_field})*)
|
(?P<maths>(?:{math_op}{math_field})*)
|
||||||
(?:>(?P<strf_format>.+?))?
|
(?:>(?P<strf_format>.+?))?
|
||||||
|
(?P<remaining>
|
||||||
(?P<alternate>(?<!\\),[^|&)]+)?
|
(?P<alternate>(?<!\\),[^|&)]+)?
|
||||||
(?:&(?P<replacement>.*?))?
|
(?:&(?P<replacement>.*?))?
|
||||||
(?:\|(?P<default>.*?))?
|
(?:\|(?P<default>.*?))?
|
||||||
$'''.format(field=FIELD_RE, math_op=MATH_OPERATORS_RE, math_field=MATH_FIELD_RE))
|
)$'''.format(field=FIELD_RE, math_op=MATH_OPERATORS_RE, math_field=MATH_FIELD_RE))
|
||||||
|
|
||||||
def _traverse_infodict(k):
|
def _traverse_infodict(k):
|
||||||
k = k.split('.')
|
k = k.split('.')
|
||||||
|
@ -1173,7 +1174,7 @@ class YoutubeDL(object):
|
||||||
value = get_value(mobj)
|
value = get_value(mobj)
|
||||||
replacement = mobj['replacement']
|
replacement = mobj['replacement']
|
||||||
if value is None and mobj['alternate']:
|
if value is None and mobj['alternate']:
|
||||||
mobj = re.match(INTERNAL_FORMAT_RE, mobj['alternate'][1:])
|
mobj = re.match(INTERNAL_FORMAT_RE, mobj['remaining'][1:])
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue