mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
Add hacks for switching protocol and path but leaving host unchanged
This commit is contained in:
parent
eecf035aa2
commit
a1124700f8
2 changed files with 14 additions and 2 deletions
|
@ -350,13 +350,13 @@ class addinfo(addbase):
|
||||||
|
|
||||||
def basejoin(base, url):
|
def basejoin(base, url):
|
||||||
type, path = splittype(url)
|
type, path = splittype(url)
|
||||||
if type: return url
|
|
||||||
host, path = splithost(path)
|
host, path = splithost(path)
|
||||||
|
if type and host: return url
|
||||||
basetype, basepath = splittype(base)
|
basetype, basepath = splittype(base)
|
||||||
basehost, basepath = splithost(basepath)
|
basehost, basepath = splithost(basepath)
|
||||||
basepath, basetag = splittag(basepath)
|
basepath, basetag = splittag(basepath)
|
||||||
basepath, basequery = splitquery(basepath)
|
basepath, basequery = splitquery(basepath)
|
||||||
type = basetype or 'file'
|
if not type: type = basetype or 'file'
|
||||||
if path[:1] != '/':
|
if path[:1] != '/':
|
||||||
i = string.rfind(basepath, '/')
|
i = string.rfind(basepath, '/')
|
||||||
if i < 0: basepath = '/'
|
if i < 0: basepath = '/'
|
||||||
|
|
|
@ -88,6 +88,18 @@ def urljoin(base, url, allow_framents = 1):
|
||||||
urlparse(base, '', allow_framents)
|
urlparse(base, '', allow_framents)
|
||||||
scheme, netloc, path, params, query, fragment = \
|
scheme, netloc, path, params, query, fragment = \
|
||||||
urlparse(url, bscheme, allow_framents)
|
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:
|
if scheme != bscheme or scheme not in uses_relative:
|
||||||
return urlunparse((scheme, netloc, path,
|
return urlunparse((scheme, netloc, path,
|
||||||
params, query, fragment))
|
params, query, fragment))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue