--- urlparse.py 2007-04-12 17:00:26.000000000 -0400 +++ urlparse.py.new 2007-05-20 19:00:37.000000000 -0400 @@ -8,23 +8,23 @@ "urlsplit", "urlunsplit"] # A classification of schemes ('' means apply by default) -uses_relative = ['ftp', 'http', 'gopher', 'nntp', 'imap', +uses_relative = set(['ftp', 'http', 'gopher', 'nntp', 'imap', 'wais', 'file', 'https', 'shttp', 'mms', - 'prospero', 'rtsp', 'rtspu', '', 'sftp'] -uses_netloc = ['ftp', 'http', 'gopher', 'nntp', 'telnet', + 'prospero', 'rtsp', 'rtspu', '', 'sftp']) +uses_netloc = set(['ftp', 'http', 'gopher', 'nntp', 'telnet', 'imap', 'wais', 'file', 'mms', 'https', 'shttp', 'snews', 'prospero', 'rtsp', 'rtspu', 'rsync', '', - 'svn', 'svn+ssh', 'sftp'] -non_hierarchical = ['gopher', 'hdl', 'mailto', 'news', - 'telnet', 'wais', 'imap', 'snews', 'sip', 'sips'] -uses_params = ['ftp', 'hdl', 'prospero', 'http', 'imap', + 'svn', 'svn+ssh', 'sftp']) +non_hierarchical = set(['gopher', 'hdl', 'mailto', 'news', + 'telnet', 'wais', 'imap', 'snews', 'sip', 'sips']) +uses_params = set(['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', + 'mms', '', 'sftp']) +uses_query = set(['http', 'wais', 'imap', 'https', 'shttp', 'mms', + 'gopher', 'rtsp', 'rtspu', 'sip', 'sips', '']) +uses_fragment = set(['ftp', 'hdl', 'http', 'gopher', 'news', 'nntp', 'wais', 'https', 'shttp', 'snews', - 'file', 'prospero', ''] + 'file', 'prospero', '']) # Characters valid in scheme names scheme_chars = ('abcdefghijklmnopqrstuvwxyz' @@ -230,16 +230,23 @@ return urlunsplit((scheme, netloc, url, query, fragment)) def urlunsplit((scheme, netloc, url, query, fragment)): - if netloc or (scheme and scheme in uses_netloc and url[:2] != '//'): + newurl = list() + if netloc or (scheme and scheme in uses_netloc): if url and url[:1] != '/': url = '/' + url - url = '//' + (netloc or '') + url + newurl.append('//') + if netloc: + newurl.append(netloc) + newurl.append(url) if scheme: - url = scheme + ':' + url + newurl.insert(0,':') + newurl.insert(0,scheme) if query: - url = url + '?' + query + newurl.append('?') + newurl.append(query) if fragment: - url = url + '#' + fragment - return url + newurl.append('#') + newurl.append(fragment) + return ''.join(newurl) def urljoin(base, url, allow_fragments=True): """Join a base URL and a possibly relative URL to form an absolute