diff options
| author | Sergey M․ <dstftw@gmail.com> | 2016-11-02 02:14:01 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2016-11-02 02:30:18 +0700 | 
| commit | 02dc0a36b72b7312996d59b9ec96768f925cb4a4 (patch) | |
| tree | 9131cde2d8f6ed7463b1254a33fada2ed8530d73 | |
| parent | 639e3b5c9985aacf7c0dc018c211a78161bbafd2 (diff) | |
[utils] Introduce base_url
| -rw-r--r-- | test/test_utils.py | 8 | ||||
| -rw-r--r-- | youtube_dl/extractor/common.py | 5 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 4 | 
3 files changed, 15 insertions, 2 deletions
| diff --git a/test/test_utils.py b/test/test_utils.py index b1b2effca..cb75ca53e 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -69,6 +69,7 @@ from youtube_dl.utils import (      uppercase_escape,      lowercase_escape,      url_basename, +    base_url,      urlencode_postdata,      urshift,      update_url_query, @@ -437,6 +438,13 @@ class TestUtil(unittest.TestCase):              url_basename('http://media.w3.org/2010/05/sintel/trailer.mp4'),              'trailer.mp4') +    def test_base_url(self): +        self.assertEqual(base_url('http://foo.de/'), 'http://foo.de/') +        self.assertEqual(base_url('http://foo.de/bar'), 'http://foo.de/') +        self.assertEqual(base_url('http://foo.de/bar/'), 'http://foo.de/bar/') +        self.assertEqual(base_url('http://foo.de/bar/baz'), 'http://foo.de/bar/') +        self.assertEqual(base_url('http://foo.de/bar/baz?x=z/x/c'), 'http://foo.de/bar/') +      def test_parse_age_limit(self):          self.assertEqual(parse_age_limit(None), None)          self.assertEqual(parse_age_limit(False), None) diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 2e9f05ae3..140ccf234 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -30,6 +30,7 @@ from ..downloader.f4m import remove_encrypted_media  from ..utils import (      NO_DEFAULT,      age_restricted, +    base_url,      bug_reports_message,      clean_html,      compiled_regex_type, @@ -1539,7 +1540,7 @@ class InfoExtractor(object):          if res is False:              return []          mpd, urlh = res -        mpd_base_url = re.match(r'https?://[^?#&]+/', urlh.geturl()).group() +        mpd_base_url = base_url(urlh.geturl())          return self._parse_mpd_formats(              compat_etree_fromstring(mpd.encode('utf-8')), mpd_id, mpd_base_url, @@ -1797,7 +1798,7 @@ class InfoExtractor(object):          if ism_doc.get('IsLive') == 'TRUE' or ism_doc.find('Protection') is not None:              return [] -        ism_base_url = re.match(r'https?://.+/', ism_url).group() +        ism_base_url = base_url(ism_url)          duration = int(ism_doc.attrib['Duration'])          timescale = int_or_none(ism_doc.get('TimeScale')) or 10000000 diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 1a5ce8688..9595bcf9f 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1691,6 +1691,10 @@ def url_basename(url):      return path.strip('/').split('/')[-1] +def base_url(url): +    return re.match(r'https?://[^?#&]+/', url).group() + +  class HEADRequest(compat_urllib_request.Request):      def get_method(self):          return 'HEAD' | 
