[YoutubeDL] format spec: Do not fail when a filter gives an empty result
For example with 'best[height<40]' we ended getting a 'IndexError: list index out of range'.
This commit is contained in:
		@@ -15,7 +15,7 @@ from youtube_dl import YoutubeDL
 | 
			
		||||
from youtube_dl.compat import compat_str
 | 
			
		||||
from youtube_dl.extractor import YoutubeIE
 | 
			
		||||
from youtube_dl.postprocessor.common import PostProcessor
 | 
			
		||||
from youtube_dl.utils import match_filter_func
 | 
			
		||||
from youtube_dl.utils import ExtractorError, match_filter_func
 | 
			
		||||
 | 
			
		||||
TEST_URL = 'http://localhost/sample.mp4'
 | 
			
		||||
 | 
			
		||||
@@ -362,6 +362,13 @@ class TestFormatSelection(unittest.TestCase):
 | 
			
		||||
        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts]
 | 
			
		||||
        self.assertEqual(downloaded_ids, ['B', 'C', 'D'])
 | 
			
		||||
 | 
			
		||||
        ydl = YDL({'format': 'best[height<40]'})
 | 
			
		||||
        try:
 | 
			
		||||
            ydl.process_ie_result(info_dict)
 | 
			
		||||
        except ExtractorError:
 | 
			
		||||
            pass
 | 
			
		||||
        self.assertEqual(ydl.downloaded_info_dicts, [])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestYoutubeDL(unittest.TestCase):
 | 
			
		||||
    def test_subtitles(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -1005,6 +1005,9 @@ class YoutubeDL(object):
 | 
			
		||||
                format_spec = selector.selector
 | 
			
		||||
 | 
			
		||||
                def selector_function(formats):
 | 
			
		||||
                    formats = list(formats)
 | 
			
		||||
                    if not formats:
 | 
			
		||||
                        return
 | 
			
		||||
                    if format_spec == 'all':
 | 
			
		||||
                        for f in formats:
 | 
			
		||||
                            yield f
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user