From a8dbb246a52ad74efb22a65a2e29ae0d304b5f04 Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Fri, 19 Feb 2010 07:45:03 +0000 Subject: [PATCH] Merged revisions 78236 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r78236 | senthil.kumaran | 2010-02-19 13:12:50 +0530 (Fri, 19 Feb 2010) | 9 lines Merged revisions 78234 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78234 | senthil.kumaran | 2010-02-19 13:02:48 +0530 (Fri, 19 Feb 2010) | 2 lines Fix for Issue7904. urlparse.urlsplit to handle schemes in the way defined by RFC3986 ........ ................ --- Lib/test/test_urlparse.py | 9 ++++++++- Lib/urllib/parse.py | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 05d468434f3..08145cb30c5 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -142,7 +142,7 @@ class UrlParseTestCase(unittest.TestCase): (base, relurl, expected)) def test_unparse_parse(self): - for u in ['Python', './Python']: + for u in ['Python', './Python','x-newscheme://foo.com/stuff']: self.assertEqual(urllib.parse.urlunsplit(urllib.parse.urlsplit(u)), u) self.assertEqual(urllib.parse.urlunparse(urllib.parse.urlparse(u)), u) @@ -347,6 +347,13 @@ class UrlParseTestCase(unittest.TestCase): # Issue 3314: sys module is used in the error self.assertRaises(TypeError, urllib.parse.urlencode, "foo") + def test_anyscheme(self): + # Issue 7904: s3://foo.com/stuff has netloc "foo.com". + self.assertEqual(urlparse.urlparse("s3://foo.com/stuff"), + ('s3','foo.com','/stuff','','','')) + self.assertEqual(urlparse.urlparse("x-newscheme://foo.com/stuff"), + ('x-newscheme','foo.com','/stuff','','','')) + def test_main(): support.run_unittest(UrlParseTestCase) diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index a27b975b4f0..c1ae5fff0e8 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -168,7 +168,7 @@ def urlsplit(url, scheme='', allow_fragments=True): break else: scheme, url = url[:i].lower(), url[i+1:] - if scheme in uses_netloc and url[:2] == '//': + if url[:2] == '//': netloc, url = _splitnetloc(url, 2) if allow_fragments and scheme in uses_fragment and '#' in url: url, fragment = url.split('#', 1)