From 70b7e3fbb62e9bec12328bb9d506327fe77a85c0 Mon Sep 17 00:00:00 2001 From: Philipp Hagemeister Date: Sun, 26 Oct 2014 20:49:51 +0100 Subject: [PATCH] [generic] Add a test case for direct links with broken HEAD (#4032) --- test/helper.py | 10 ++++++++++ test/test_download.py | 2 ++ youtube_dl/extractor/generic.py | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/test/helper.py b/test/helper.py index 2fa45631a..fb8618120 100644 --- 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 index 8178015ea..608e4528e 100644 --- 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 index 51dbbc8db..52f286ac6 100644 --- 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):