Split FileDownloader in two classes: FileDownloader and YoutubeDL

YoutubeDL is the class that coordinates everything
FileDownloader gets a filename and an info dict and downloads the video.
This commit is contained in:
Jaime Marquínez Ferrándiz 2013-06-18 22:14:21 +02:00
parent c7253e2e8c
commit 8222d8de88
5 changed files with 636 additions and 554 deletions

View file

@ -13,7 +13,7 @@ import binascii
# Allow direct execution
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import youtube_dl.FileDownloader
import youtube_dl.YoutubeDL
import youtube_dl.extractor
from youtube_dl.utils import *
@ -40,17 +40,17 @@ def _try_rm(filename):
md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest()
class FileDownloader(youtube_dl.FileDownloader):
class YoutubeDL(youtube_dl.YoutubeDL):
def __init__(self, *args, **kwargs):
self.to_stderr = self.to_screen
self.processed_info_dicts = []
return youtube_dl.FileDownloader.__init__(self, *args, **kwargs)
super(YoutubeDL, self).__init__(*args, **kwargs)
def report_warning(self, message):
# Don't accept warnings during tests
raise ExtractorError(message)
def process_info(self, info_dict):
self.processed_info_dicts.append(info_dict)
return youtube_dl.FileDownloader.process_info(self, info_dict)
return super(YoutubeDL, self).process_info(info_dict)
def _file_md5(fn):
with open(fn, 'rb') as f:
@ -86,14 +86,14 @@ def generator(test_case):
params = self.parameters.copy()
params.update(test_case.get('params', {}))
fd = FileDownloader(params)
ydl = YoutubeDL(params)
for ie in youtube_dl.extractor.gen_extractors():
fd.add_info_extractor(ie)
ydl.add_info_extractor(ie)
finished_hook_called = set()
def _hook(status):
if status['status'] == 'finished':
finished_hook_called.add(status['filename'])
fd.add_progress_hook(_hook)
ydl.fd.add_progress_hook(_hook)
test_cases = test_case.get('playlist', [test_case])
for tc in test_cases:
@ -103,7 +103,7 @@ def generator(test_case):
try:
for retry in range(1, RETRIES + 1):
try:
fd.download([test_case['url']])
ydl.download([test_case['url']])
except (DownloadError, ExtractorError) as err:
if retry == RETRIES: raise

View file

@ -9,7 +9,7 @@ import unittest
# Allow direct execution
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import youtube_dl.FileDownloader
import youtube_dl.YoutubeDL
import youtube_dl.extractor
from youtube_dl.utils import *
@ -22,9 +22,9 @@ proxy_handler = compat_urllib_request.ProxyHandler()
opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler())
compat_urllib_request.install_opener(opener)
class FileDownloader(youtube_dl.FileDownloader):
class YoutubeDL(youtube_dl.YoutubeDL):
def __init__(self, *args, **kwargs):
youtube_dl.FileDownloader.__init__(self, *args, **kwargs)
super(YoutubeDL, self).__init__(*args, **kwargs)
self.to_stderr = self.to_screen
with io.open(PARAMETERS_FILE, encoding='utf-8') as pf:
@ -49,9 +49,9 @@ class TestInfoJSON(unittest.TestCase):
def test_info_json(self):
ie = youtube_dl.extractor.YoutubeIE()
fd = FileDownloader(params)
fd.add_info_extractor(ie)
fd.download([TEST_ID])
ydl = YoutubeDL(params)
ydl.add_info_extractor(ie)
ydl.download([TEST_ID])
self.assertTrue(os.path.exists(INFO_JSON_FILE))
with io.open(INFO_JSON_FILE, 'r', encoding='utf-8') as jsonf:
jd = json.load(jsonf)