mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	Make sure netrc works for all extractors with login support
Fixes #5112
This commit is contained in:
		
							
								
								
									
										26
									
								
								test/test_netrc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								test/test_netrc.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | # coding: utf-8 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  |  | ||||||
|  | import os | ||||||
|  | import sys | ||||||
|  | import unittest | ||||||
|  | sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | from youtube_dl.extractor import ( | ||||||
|  |     gen_extractors, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestNetRc(unittest.TestCase): | ||||||
|  |     def test_netrc_present(self): | ||||||
|  |         for ie in gen_extractors(): | ||||||
|  |             if not hasattr(ie, '_login'): | ||||||
|  |                 continue | ||||||
|  |             self.assertTrue( | ||||||
|  |                 hasattr(ie, '_NETRC_MACHINE'), | ||||||
|  |                 'Extractor %s supports login, but is missing a _NETRC_MACHINE property' % ie.IE_NAME) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     unittest.main() | ||||||
| @@ -19,6 +19,7 @@ from ..utils import ( | |||||||
|  |  | ||||||
| class AtresPlayerIE(InfoExtractor): | class AtresPlayerIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://(?:www\.)?atresplayer\.com/television/[^/]+/[^/]+/[^/]+/(?P<id>.+?)_\d+\.html' |     _VALID_URL = r'https?://(?:www\.)?atresplayer\.com/television/[^/]+/[^/]+/[^/]+/(?P<id>.+?)_\d+\.html' | ||||||
|  |     _NETRC_MACHINE = 'atresplayer' | ||||||
|     _TESTS = [ |     _TESTS = [ | ||||||
|         { |         { | ||||||
|             'url': 'http://www.atresplayer.com/television/programas/el-club-de-la-comedia/temporada-4/capitulo-10-especial-solidario-nochebuena_2014122100174.html', |             'url': 'http://www.atresplayer.com/television/programas/el-club-de-la-comedia/temporada-4/capitulo-10-especial-solidario-nochebuena_2014122100174.html', | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ from ..aes import ( | |||||||
|  |  | ||||||
| class CrunchyrollIE(InfoExtractor): | class CrunchyrollIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://(?:(?P<prefix>www|m)\.)?(?P<url>crunchyroll\.(?:com|fr)/(?:[^/]*/[^/?&]*?|media/\?id=)(?P<video_id>[0-9]+))(?:[/?&]|$)' |     _VALID_URL = r'https?://(?:(?P<prefix>www|m)\.)?(?P<url>crunchyroll\.(?:com|fr)/(?:[^/]*/[^/?&]*?|media/\?id=)(?P<video_id>[0-9]+))(?:[/?&]|$)' | ||||||
|  |     _NETRC_MACHINE = 'crunchyroll' | ||||||
|     _TESTS = [{ |     _TESTS = [{ | ||||||
|         'url': 'http://www.crunchyroll.com/wanna-be-the-strongest-in-the-world/episode-1-an-idol-wrestler-is-born-645513', |         'url': 'http://www.crunchyroll.com/wanna-be-the-strongest-in-the-world/episode-1-an-idol-wrestler-is-born-645513', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ from ..utils import remove_end | |||||||
|  |  | ||||||
| class GDCVaultIE(InfoExtractor): | class GDCVaultIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://(?:www\.)?gdcvault\.com/play/(?P<id>\d+)/(?P<name>(\w|-)+)' |     _VALID_URL = r'https?://(?:www\.)?gdcvault\.com/play/(?P<id>\d+)/(?P<name>(\w|-)+)' | ||||||
|  |     _NETRC_MACHINE = 'gdcvault' | ||||||
|     _TESTS = [ |     _TESTS = [ | ||||||
|         { |         { | ||||||
|             'url': 'http://www.gdcvault.com/play/1019721/Doki-Doki-Universe-Sweet-Simple', |             'url': 'http://www.gdcvault.com/play/1019721/Doki-Doki-Universe-Sweet-Simple', | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ class LyndaBaseIE(InfoExtractor): | |||||||
|     _LOGIN_URL = 'https://www.lynda.com/login/login.aspx' |     _LOGIN_URL = 'https://www.lynda.com/login/login.aspx' | ||||||
|     _SUCCESSFUL_LOGIN_REGEX = r'isLoggedIn: true' |     _SUCCESSFUL_LOGIN_REGEX = r'isLoggedIn: true' | ||||||
|     _ACCOUNT_CREDENTIALS_HINT = 'Use --username and --password options to provide lynda.com account credentials.' |     _ACCOUNT_CREDENTIALS_HINT = 'Use --username and --password options to provide lynda.com account credentials.' | ||||||
|  |     _NETRC_MACHINE = 'lynda' | ||||||
|  |  | ||||||
|     def _real_initialize(self): |     def _real_initialize(self): | ||||||
|         self._login() |         self._login() | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ class TwitchBaseIE(InfoExtractor): | |||||||
|     _API_BASE = 'https://api.twitch.tv' |     _API_BASE = 'https://api.twitch.tv' | ||||||
|     _USHER_BASE = 'http://usher.twitch.tv' |     _USHER_BASE = 'http://usher.twitch.tv' | ||||||
|     _LOGIN_URL = 'https://secure.twitch.tv/user/login' |     _LOGIN_URL = 'https://secure.twitch.tv/user/login' | ||||||
|  |     _NETRC_MACHINE = 'twitch' | ||||||
|  |  | ||||||
|     def _handle_error(self, response): |     def _handle_error(self, response): | ||||||
|         if not isinstance(response, dict): |         if not isinstance(response, dict): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister