summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/urlparse.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/Lib/urlparse.py b/Lib/urlparse.py
index d927b7e..b747bc6 100644
--- a/Lib/urlparse.py
+++ b/Lib/urlparse.py
@@ -114,7 +114,7 @@ def urlunparse((scheme, netloc, url, params, query, fragment)):
originally had redundant delimiters, e.g. a ? with an empty query
(the draft states that these are equivalent)."""
if netloc or (scheme in uses_netloc and url[:2] == '//'):
- if url[:1] != '/': url = '/' + url
+ if url and url[:1] != '/': url = '/' + url
url = '//' + (netloc or '') + url
if scheme:
url = scheme + ':' + url
@@ -131,13 +131,14 @@ def urljoin(base, url, allow_fragments = 1):
interpretation of the latter."""
if not base:
return url
+ if not url:
+ return base
bscheme, bnetloc, bpath, bparams, bquery, bfragment = \
urlparse(base, '', allow_fragments)
scheme, netloc, path, params, query, fragment = \
urlparse(url, bscheme, allow_fragments)
if scheme != bscheme or scheme not in uses_relative:
- return urlunparse((scheme, netloc, path,
- params, query, fragment))
+ return url
if scheme in uses_netloc:
if netloc:
return urlunparse((scheme, netloc, path,
@@ -147,8 +148,12 @@ def urljoin(base, url, allow_fragments = 1):
return urlunparse((scheme, netloc, path,
params, query, fragment))
if not path:
+ if not params:
+ params = bparams
+ if not query:
+ query = bquery
return urlunparse((scheme, netloc, bpath,
- params, query or bquery, fragment))
+ params, query, fragment))
segments = bpath.split('/')[:-1] + path.split('/')
# XXX The stuff below is bogus in various ways...
if segments[-1] == '.':
@@ -159,13 +164,14 @@ def urljoin(base, url, allow_fragments = 1):
i = 1
n = len(segments) - 1
while i < n:
- if segments[i] == '..' and segments[i-1]:
+ if (segments[i] == '..'
+ and segments[i-1] not in ('', '..')):
del segments[i-1:i+1]
break
i = i+1
else:
break
- if len(segments) == 2 and segments[1] == '..' and segments[0] == '':
+ if segments == ['', '..']:
segments[-1] = ''
elif len(segments) >= 2 and segments[-1] == '..':
segments[-2:] = ['']