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'""" | ||||
|         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): | ||||
|         dl = FakeYDL() | ||||
|         dl.params['noplaylist'] = True | ||||
| @@ -41,36 +32,7 @@ class TestYoutubeLists(unittest.TestCase): | ||||
|         result = ie.extract('https://www.youtube.com/watch?v=FXxLjLQi3Fg&list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re') | ||||
|         self.assertEqual(result['_type'], 'url') | ||||
|         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): | ||||
|         dl = FakeYDL() | ||||
|         ie = YoutubePlaylistIE(dl) | ||||
| @@ -97,12 +59,6 @@ class TestYoutubeLists(unittest.TestCase): | ||||
|         result = ie.extract('https://www.youtube.com/user/TheLinuxFoundation') | ||||
|         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): | ||||
|         dl = FakeYDL() | ||||
|         ie = YoutubeShowIE(dl) | ||||
|   | ||||
| @@ -221,6 +221,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | ||||
|                          ) | ||||
|                      )?                                                       # all until now is optional -> you can pass the naked 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 | ||||
|                      $""" | ||||
|     _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): | ||||
|         super(YoutubeIE, self).__init__(*args, **kwargs) | ||||
|         self._player_cache = {} | ||||
| @@ -1026,6 +1020,39 @@ class YoutubePlaylistIE(YoutubeBaseInfoExtractor): | ||||
|             'title': 'ytdl test PL', | ||||
|         }, | ||||
|         '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): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister