summaryrefslogtreecommitdiff
path: root/Lib/urllib/parse.py
diff options
context:
space:
mode:
authorSenthil Kumaran <orsenthil@gmail.com>2010-04-16 03:06:19 +0000
committerSenthil Kumaran <orsenthil@gmail.com>2010-04-16 03:06:19 +0000
commit923f91f0daf830d238b16bca19f4e957119e1833 (patch)
treee9f90dc6ce20222a33de944bfb58a52e0f950565 /Lib/urllib/parse.py
parent4dfcaaf78583bab426cd1c0f6cc0c459de84bdf8 (diff)
downloadcpython-923f91f0daf830d238b16bca19f4e957119e1833.tar.gz
Merged revisions 80102 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r80102 | senthil.kumaran | 2010-04-16 08:32:13 +0530 (Fri, 16 Apr 2010) | 9 lines Merged revisions 80101 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r80101 | senthil.kumaran | 2010-04-16 08:16:46 +0530 (Fri, 16 Apr 2010) | 3 lines Fix issue2987: RFC2732 support for urlparse (IPv6 addresses) ........ ................
Diffstat (limited to 'Lib/urllib/parse.py')
-rw-r--r--Lib/urllib/parse.py32
1 files changed, 20 insertions, 12 deletions
diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
index c1ae5fff0e..1affc6930d 100644
--- a/Lib/urllib/parse.py
+++ b/Lib/urllib/parse.py
@@ -69,22 +69,26 @@ class ResultMixin(object):
@property
def hostname(self):
- netloc = self.netloc
- if "@" in netloc:
- netloc = netloc.rsplit("@", 1)[1]
- if ":" in netloc:
- netloc = netloc.split(":", 1)[0]
- return netloc.lower() or None
+ netloc = self.netloc.split('@')[-1]
+ if '[' in netloc and ']' in netloc:
+ return netloc.split(']')[0][1:].lower()
+ elif '[' in netloc or ']' in netloc:
+ raise ValueError("Invalid IPv6 hostname")
+ elif ':' in netloc:
+ return netloc.split(':')[0].lower()
+ elif netloc == '':
+ return None
+ else:
+ return netloc.lower()
@property
def port(self):
- netloc = self.netloc
- if "@" in netloc:
- netloc = netloc.rsplit("@", 1)[1]
- if ":" in netloc:
- port = netloc.split(":", 1)[1]
+ netloc = self.netloc.split('@')[-1].split(']')[-1]
+ if ':' in netloc:
+ port = netloc.split(':')[1]
return int(port, 10)
- return None
+ else:
+ return None
from collections import namedtuple
@@ -129,6 +133,10 @@ def _splitparams(url):
def _splitnetloc(url, start=0):
delim = len(url) # position of end of domain part of url, default is end
+ if '[' in url: # check for invalid IPv6 URL
+ if not ']' in url: raise ValueError("Invalid IPv6 URL")
+ elif ']' in url:
+ if not '[' in url: raise ValueError("Invalid IPv6 URL")
for c in '/?#': # look for delimiters; the order is NOT important
wdelim = url.find(c, start) # find first of this delim
if wdelim >= 0: # if found