]> granicus.if.org Git - python/commitdiff
Issue9374 - Generic parsing of query and fragment portion of urls for any scheme
authorSenthil Kumaran <senthil@uthcode.com>
Sat, 19 May 2012 00:10:40 +0000 (08:10 +0800)
committerSenthil Kumaran <senthil@uthcode.com>
Sat, 19 May 2012 00:10:40 +0000 (08:10 +0800)
Lib/test/test_urlparse.py
Lib/urlparse.py
Misc/NEWS

index 39a897a1a91cead77cbd8f23c4f6b714792357be..827282cedc0e7bc45c032f6dc18dba793c43f808 100644 (file)
@@ -493,6 +493,10 @@ class UrlParseTestCase(unittest.TestCase):
                          ('s3','foo.com','/stuff','','',''))
         self.assertEqual(urlparse.urlparse("x-newscheme://foo.com/stuff"),
                          ('x-newscheme','foo.com','/stuff','','',''))
+        self.assertEqual(urlparse.urlparse("x-newscheme://foo.com/stuff?query#fragment"),
+                         ('x-newscheme','foo.com','/stuff','','query','fragment'))
+        self.assertEqual(urlparse.urlparse("x-newscheme://foo.com/stuff?query"),
+                         ('x-newscheme','foo.com','/stuff','','query',''))
 
     def test_withoutscheme(self):
         # Test urlparse without scheme
index b42e0f4c621774ee23c52c3db719671b8c314022..32eebe69bd412337a1532ee90fedf5377d409687 100644 (file)
@@ -40,16 +40,9 @@ uses_netloc = ['ftp', 'http', 'gopher', 'nntp', 'telnet',
                'imap', 'wais', 'file', 'mms', 'https', 'shttp',
                'snews', 'prospero', 'rtsp', 'rtspu', 'rsync', '',
                'svn', 'svn+ssh', 'sftp','nfs','git', 'git+ssh']
-non_hierarchical = ['gopher', 'hdl', 'mailto', 'news',
-                    'telnet', 'wais', 'imap', 'snews', 'sip', 'sips']
 uses_params = ['ftp', 'hdl', 'prospero', 'http', 'imap',
                'https', 'shttp', 'rtsp', 'rtspu', 'sip', 'sips',
                'mms', '', 'sftp']
-uses_query = ['http', 'wais', 'imap', 'https', 'shttp', 'mms',
-              'gopher', 'rtsp', 'rtspu', 'sip', 'sips', '']
-uses_fragment = ['ftp', 'hdl', 'http', 'gopher', 'news',
-                 'nntp', 'wais', 'https', 'shttp', 'snews',
-                 'file', 'prospero', '']
 
 # Characters valid in scheme names
 scheme_chars = ('abcdefghijklmnopqrstuvwxyz'
@@ -204,9 +197,9 @@ def urlsplit(url, scheme='', allow_fragments=True):
         if (('[' in netloc and ']' not in netloc) or
                 (']' in netloc and '[' not in netloc)):
             raise ValueError("Invalid IPv6 URL")
-    if allow_fragments and scheme in uses_fragment and '#' in url:
+    if allow_fragments and '#' in url:
         url, fragment = url.split('#', 1)
-    if scheme in uses_query and '?' in url:
+    if '?' in url:
         url, query = url.split('?', 1)
     v = SplitResult(scheme, netloc, url, query, fragment)
     _parse_cache[key] = v
index 088d1e4e9e07953367446d5b0f3ecc610ab15331..646b35155ae4eb2558fa0d05fdebc5a1e8c8db14 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -60,6 +60,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #9374: Generic parsing of query and fragment portions of url for any
+  scheme. Supported both by RFC3986 and RFC2396.
+
 - Issue #14798: Fix the functions in pyclbr to raise an ImportError
   when the first part of a dotted name is not a package. Patch by
   Xavier de Gaye.