youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

commit 70b7e3fbb62e9bec12328bb9d506327fe77a85c0
parent 579657ad8726ab0cdefd98fbbb28f09fbcf94e96
Author: Philipp Hagemeister <phihag@phihag.de>
Date:   Sun, 26 Oct 2014 20:49:51 +0100

[generic] Add a test case for direct links with broken HEAD (#4032)

Diffstat:
Mtest/helper.py | 10++++++++++
Mtest/test_download.py | 2++
Myoutube_dl/extractor/generic.py | 17++++++++++++++++-
3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/test/helper.py b/test/helper.py @@ -171,3 +171,13 @@ def assertGreaterEqual(self, got, expected, msg=None): if msg is None: msg = '%r not greater than or equal to %r' % (got, expected) self.assertTrue(got >= expected, msg) + + +def expect_warnings(ydl, warnings_re): + real_warning = ydl.report_warning + + def _report_warning(w): + if not any(re.search(w_re, w) for w_re in warnings_re): + real_warning(w) + + ydl.report_warning = _report_warning diff --git a/test/test_download.py b/test/test_download.py @@ -8,6 +8,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from test.helper import ( assertGreaterEqual, + expect_warnings, get_params, gettestcases, expect_info_dict, @@ -100,6 +101,7 @@ def generator(test_case): if status['status'] == 'finished': finished_hook_called.add(status['filename']) ydl.add_progress_hook(_hook) + expect_warnings(ydl, test_case.get('expected_warnings', [])) def get_tc_filename(tc): return tc.get('file') or ydl.prepare_filename(tc.get('info_dict', {})) diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py @@ -389,8 +389,23 @@ class GenericIE(InfoExtractor): 'title': 'Conversation about Hexagonal Rails Part 1 - ThoughtWorks', 'duration': 1715.0, 'uploader': 'thoughtworks.wistia.com', - }, + }, }, + # Direct download with broken HEAD + { + 'url': 'http://ai-radio.org:8000/radio.opus', + 'info_dict': { + 'id': 'radio', + 'ext': 'opus', + 'title': 'radio', + }, + 'params': { + 'skip_download': True, # infinite live stream + }, + 'expected_warnings': [ + r'501.*Not Implemented' + ], + } ] def report_following_redirect(self, new_url):