[YoutubeDL] format spec: add additional checks for invalid syntax
parent
bb8e553662
commit
0a31a35098
|
@ -302,6 +302,16 @@ class TestFormatSelection(unittest.TestCase):
|
||||||
downloaded = ydl.downloaded_info_dicts[0]
|
downloaded = ydl.downloaded_info_dicts[0]
|
||||||
self.assertEqual(downloaded['format_id'], f1['format_id'])
|
self.assertEqual(downloaded['format_id'], f1['format_id'])
|
||||||
|
|
||||||
|
def test_invalid_format_specs(self):
|
||||||
|
def assert_syntax_error(format_spec):
|
||||||
|
ydl = YDL({'format': format_spec})
|
||||||
|
info_dict = _make_result([{'format_id': 'foo', 'url': TEST_URL}])
|
||||||
|
self.assertRaises(SyntaxError, ydl.process_ie_result, info_dict)
|
||||||
|
|
||||||
|
assert_syntax_error('bestvideo,,best')
|
||||||
|
assert_syntax_error('+bestaudio')
|
||||||
|
assert_syntax_error('bestvideo+')
|
||||||
|
|
||||||
def test_format_filtering(self):
|
def test_format_filtering(self):
|
||||||
formats = [
|
formats = [
|
||||||
{'format_id': 'A', 'filesize': 500, 'width': 1000},
|
{'format_id': 'A', 'filesize': 500, 'width': 1000},
|
||||||
|
|
|
@ -953,6 +953,8 @@ class YoutubeDL(object):
|
||||||
tokens.restore_last_token()
|
tokens.restore_last_token()
|
||||||
break
|
break
|
||||||
elif string == ',':
|
elif string == ',':
|
||||||
|
if not current_selector:
|
||||||
|
raise syntax_error('"," must follow a format selector', start)
|
||||||
selectors.append(current_selector)
|
selectors.append(current_selector)
|
||||||
current_selector = None
|
current_selector = None
|
||||||
elif string == '/':
|
elif string == '/':
|
||||||
|
@ -972,6 +974,8 @@ class YoutubeDL(object):
|
||||||
elif string == '+':
|
elif string == '+':
|
||||||
video_selector = current_selector
|
video_selector = current_selector
|
||||||
audio_selector = _parse_format_selection(tokens, inside_merge=True)
|
audio_selector = _parse_format_selection(tokens, inside_merge=True)
|
||||||
|
if not video_selector or not audio_selector:
|
||||||
|
raise syntax_error('"+" must be between two format selectors', start)
|
||||||
current_selector = FormatSelector(MERGE, (video_selector, audio_selector), [])
|
current_selector = FormatSelector(MERGE, (video_selector, audio_selector), [])
|
||||||
else:
|
else:
|
||||||
raise syntax_error('Operator not recognized: "{0}"'.format(string), start)
|
raise syntax_error('Operator not recognized: "{0}"'.format(string), start)
|
||||||
|
|
Loading…
Reference in New Issue