diff options
| -rw-r--r-- | test/helper.py | 10 | ||||
| -rw-r--r-- | test/test_download.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/generic.py | 17 | 
3 files changed, 28 insertions, 1 deletions
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):  | 
