mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Add infrastructure for paged lists
This commit allows to download pages in playlists as needed instead of all at once.
Before this commit,
    youtube-dl http://www.youtube.com/user/ANNnewsCH/videos --playlist-end 2 --skip-download
took quite some time - now it's almost instantaneous.
As an example, the youtube:user extractor has been converted.
Fixes #2175
			
			
This commit is contained in:
		| @@ -18,6 +18,7 @@ from youtube_dl.utils import ( | ||||
|     find_xpath_attr, | ||||
|     get_meta_content, | ||||
|     orderedSet, | ||||
|     PagedList, | ||||
|     parse_duration, | ||||
|     sanitize_filename, | ||||
|     shell_quote, | ||||
| @@ -200,5 +201,26 @@ class TestUtil(unittest.TestCase): | ||||
|         self.assertEqual(parse_duration('9:12:43'), 33163) | ||||
|         self.assertEqual(parse_duration('x:y'), None) | ||||
|  | ||||
|     def test_paged_list(self): | ||||
|         def testPL(size, pagesize, sliceargs, expected): | ||||
|             def get_page(pagenum): | ||||
|                 firstid = pagenum * pagesize | ||||
|                 upto = min(size, pagenum * pagesize + pagesize) | ||||
|                 for i in range(firstid, upto): | ||||
|                     yield i | ||||
|  | ||||
|             pl = PagedList(get_page, pagesize) | ||||
|             got = pl.getslice(*sliceargs) | ||||
|             self.assertEqual(got, expected) | ||||
|  | ||||
|         testPL(5, 2, (), [0, 1, 2, 3, 4]) | ||||
|         testPL(5, 2, (1,), [1, 2, 3, 4]) | ||||
|         testPL(5, 2, (2,), [2, 3, 4]) | ||||
|         testPL(5, 2, (4,), [4]) | ||||
|         testPL(5, 2, (0, 3), [0, 1, 2]) | ||||
|         testPL(5, 2, (1, 4), [1, 2, 3]) | ||||
|         testPL(5, 2, (2, 99), [2, 3, 4]) | ||||
|         testPL(5, 2, (20, 99), []) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister