mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[youtube] Move more tests to Playlist IE, and simply suitable.
This commit is contained in:
		| @@ -25,15 +25,6 @@ class TestYoutubeLists(unittest.TestCase): | |||||||
|         """Make sure the info has '_type' set to 'playlist'""" |         """Make sure the info has '_type' set to 'playlist'""" | ||||||
|         self.assertEqual(info['_type'], 'playlist') |         self.assertEqual(info['_type'], 'playlist') | ||||||
|  |  | ||||||
|     def test_youtube_playlist(self): |  | ||||||
|         dl = FakeYDL() |  | ||||||
|         ie = YoutubePlaylistIE(dl) |  | ||||||
|         result = ie.extract('https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re') |  | ||||||
|         self.assertIsPlaylist(result) |  | ||||||
|         self.assertEqual(result['title'], 'ytdl test PL') |  | ||||||
|         ytie_results = [YoutubeIE().extract_id(url['url']) for url in result['entries']] |  | ||||||
|         self.assertEqual(ytie_results, [ 'bV9L5Ht9LgY', 'FXxLjLQi3Fg', 'tU3Bgo5qJZE']) |  | ||||||
|  |  | ||||||
|     def test_youtube_playlist_noplaylist(self): |     def test_youtube_playlist_noplaylist(self): | ||||||
|         dl = FakeYDL() |         dl = FakeYDL() | ||||||
|         dl.params['noplaylist'] = True |         dl.params['noplaylist'] = True | ||||||
| @@ -42,35 +33,6 @@ class TestYoutubeLists(unittest.TestCase): | |||||||
|         self.assertEqual(result['_type'], 'url') |         self.assertEqual(result['_type'], 'url') | ||||||
|         self.assertEqual(YoutubeIE().extract_id(result['url']), 'FXxLjLQi3Fg') |         self.assertEqual(YoutubeIE().extract_id(result['url']), 'FXxLjLQi3Fg') | ||||||
|      |      | ||||||
|     def test_issue_673(self): |  | ||||||
|         dl = FakeYDL() |  | ||||||
|         ie = YoutubePlaylistIE(dl) |  | ||||||
|         result = ie.extract('PLBB231211A4F62143') |  | ||||||
|         self.assertTrue(len(result['entries']) > 25) |  | ||||||
|  |  | ||||||
|     def test_youtube_playlist_long(self): |  | ||||||
|         dl = FakeYDL() |  | ||||||
|         ie = YoutubePlaylistIE(dl) |  | ||||||
|         result = ie.extract('https://www.youtube.com/playlist?list=UUBABnxM4Ar9ten8Mdjj1j0Q') |  | ||||||
|         self.assertIsPlaylist(result) |  | ||||||
|         self.assertTrue(len(result['entries']) >= 799) |  | ||||||
|  |  | ||||||
|     def test_youtube_playlist_with_deleted(self): |  | ||||||
|         #651 |  | ||||||
|         dl = FakeYDL() |  | ||||||
|         ie = YoutubePlaylistIE(dl) |  | ||||||
|         result = ie.extract('https://www.youtube.com/playlist?list=PLwP_SiAcdui0KVebT0mU9Apz359a4ubsC') |  | ||||||
|         ytie_results = [YoutubeIE().extract_id(url['url']) for url in result['entries']] |  | ||||||
|         self.assertFalse('pElCt5oNDuI' in ytie_results) |  | ||||||
|         self.assertFalse('KdPEApIVdWM' in ytie_results) |  | ||||||
|          |  | ||||||
|     def test_youtube_playlist_empty(self): |  | ||||||
|         dl = FakeYDL() |  | ||||||
|         ie = YoutubePlaylistIE(dl) |  | ||||||
|         result = ie.extract('https://www.youtube.com/playlist?list=PLtPgu7CB4gbZDA7i_euNxn75ISqxwZPYx') |  | ||||||
|         self.assertIsPlaylist(result) |  | ||||||
|         self.assertEqual(len(result['entries']), 0) |  | ||||||
|  |  | ||||||
|     def test_youtube_course(self): |     def test_youtube_course(self): | ||||||
|         dl = FakeYDL() |         dl = FakeYDL() | ||||||
|         ie = YoutubePlaylistIE(dl) |         ie = YoutubePlaylistIE(dl) | ||||||
| @@ -97,12 +59,6 @@ class TestYoutubeLists(unittest.TestCase): | |||||||
|         result = ie.extract('https://www.youtube.com/user/TheLinuxFoundation') |         result = ie.extract('https://www.youtube.com/user/TheLinuxFoundation') | ||||||
|         self.assertTrue(len(result['entries']) >= 320) |         self.assertTrue(len(result['entries']) >= 320) | ||||||
|  |  | ||||||
|     def test_youtube_safe_search(self): |  | ||||||
|         dl = FakeYDL() |  | ||||||
|         ie = YoutubePlaylistIE(dl) |  | ||||||
|         result = ie.extract('PLtPgu7CB4gbY9oDN3drwC3cMbJggS7dKl') |  | ||||||
|         self.assertEqual(len(result['entries']), 2) |  | ||||||
|  |  | ||||||
|     def test_youtube_show(self): |     def test_youtube_show(self): | ||||||
|         dl = FakeYDL() |         dl = FakeYDL() | ||||||
|         ie = YoutubeShowIE(dl) |         ie = YoutubeShowIE(dl) | ||||||
|   | |||||||
| @@ -221,6 +221,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|                          ) |                          ) | ||||||
|                      )?                                                       # all until now is optional -> you can pass the naked ID |                      )?                                                       # all until now is optional -> you can pass the naked ID | ||||||
|                      ([0-9A-Za-z_-]{11})                                      # here is it! the YouTube video ID |                      ([0-9A-Za-z_-]{11})                                      # here is it! the YouTube video ID | ||||||
|  |                      (?!.*?&list=)                                            # combined list/video URLs are handled by the playlist IE | ||||||
|                      (?(1).+)?                                                # if we found the ID, everything can follow |                      (?(1).+)?                                                # if we found the ID, everything can follow | ||||||
|                      $""" |                      $""" | ||||||
|     _NEXT_URL_RE = r'[\?&]next_url=([^&]+)' |     _NEXT_URL_RE = r'[\?&]next_url=([^&]+)' | ||||||
| @@ -387,13 +388,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|         }, |         }, | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def suitable(cls, url): |  | ||||||
|         """Receives a URL and returns True if suitable for this IE.""" |  | ||||||
|         if YoutubePlaylistIE.suitable(url): return False |  | ||||||
|         return re.match(cls._VALID_URL, url) is not None |  | ||||||
|  |  | ||||||
|     def __init__(self, *args, **kwargs): |     def __init__(self, *args, **kwargs): | ||||||
|         super(YoutubeIE, self).__init__(*args, **kwargs) |         super(YoutubeIE, self).__init__(*args, **kwargs) | ||||||
|         self._player_cache = {} |         self._player_cache = {} | ||||||
| @@ -1026,6 +1020,39 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): | |||||||
|             'title': 'ytdl test PL', |             'title': 'ytdl test PL', | ||||||
|         }, |         }, | ||||||
|         'playlist_count': 3, |         'playlist_count': 3, | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.youtube.com/playlist?list=PLtPgu7CB4gbZDA7i_euNxn75ISqxwZPYx', | ||||||
|  |         'info_dict': { | ||||||
|  |             'title': 'YDL_Empty_List', | ||||||
|  |         }, | ||||||
|  |         'playlist_count': 0, | ||||||
|  |     }, { | ||||||
|  |         'note': 'Playlist with deleted videos (#651). As a bonus, the video #51 is also twice in this list.', | ||||||
|  |         'url': 'https://www.youtube.com/playlist?list=PLwP_SiAcdui0KVebT0mU9Apz359a4ubsC', | ||||||
|  |         'info_dict': { | ||||||
|  |             'title': '29C3: Not my department', | ||||||
|  |         }, | ||||||
|  |         'playlist_count': 95, | ||||||
|  |     }, { | ||||||
|  |         'note': 'issue #673', | ||||||
|  |         'url': 'PLBB231211A4F62143', | ||||||
|  |         'info_dict': { | ||||||
|  |             'title': 'Team Fortress 2 (Class-based LP)', | ||||||
|  |         }, | ||||||
|  |         'playlist_mincount': 26, | ||||||
|  |     }, { | ||||||
|  |         'note': 'Large playlist', | ||||||
|  |         'url': 'https://www.youtube.com/playlist?list=UUBABnxM4Ar9ten8Mdjj1j0Q', | ||||||
|  |         'info_dict': { | ||||||
|  |             'title': 'Uploads from Cauchemar', | ||||||
|  |         }, | ||||||
|  |         'playlist_mincount': 799, | ||||||
|  |     }, { | ||||||
|  |         'url': 'PLtPgu7CB4gbY9oDN3drwC3cMbJggS7dKl', | ||||||
|  |         'info_dict': { | ||||||
|  |             'title': 'YDL_safe_search', | ||||||
|  |         }, | ||||||
|  |         'playlist_count': 2, | ||||||
|     }] |     }] | ||||||
|  |  | ||||||
|     def _real_initialize(self): |     def _real_initialize(self): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister