From: Guido van Rossum Date: Fri, 30 Dec 1994 17:18:59 +0000 (+0000) Subject: Add hacks for switching protocol and path but leaving host unchanged X-Git-Tag: v1.2b1~95 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a1124700f80db19ff02d98f4de4303496c0d203a;p=thirdparty%2FPython%2Fcpython.git Add hacks for switching protocol and path but leaving host unchanged --- diff --git a/Lib/urllib.py b/Lib/urllib.py index 651e37fc18ff..c49f032066bf 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -350,13 +350,13 @@ class addinfo(addbase): def basejoin(base, url): type, path = splittype(url) - if type: return url host, path = splithost(path) + if type and host: return url basetype, basepath = splittype(base) basehost, basepath = splithost(basepath) basepath, basetag = splittag(basepath) basepath, basequery = splitquery(basepath) - type = basetype or 'file' + if not type: type = basetype or 'file' if path[:1] != '/': i = string.rfind(basepath, '/') if i < 0: basepath = '/' diff --git a/Lib/urlparse.py b/Lib/urlparse.py index 37fe62aad816..9fce0bd8517e 100644 --- a/Lib/urlparse.py +++ b/Lib/urlparse.py @@ -88,6 +88,18 @@ def urljoin(base, url, allow_framents = 1): urlparse(base, '', allow_framents) scheme, netloc, path, params, query, fragment = \ urlparse(url, bscheme, allow_framents) + # XXX Unofficial hack: default netloc to bnetloc even if + # schemes differ + if scheme != bscheme and not netloc and \ + scheme in uses_relative and bscheme in uses_relative and \ + scheme in uses_netloc and bscheme in uses_netloc: + netloc = bnetloc + # Strip the port number + i = string.find(netloc, '@') + if i < 0: i = 0 + i = string.find(netloc, ':', i) + if i >= 0: + netloc = netloc[:i] if scheme != bscheme or scheme not in uses_relative: return urlunparse((scheme, netloc, path, params, query, fragment))