mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #20270: urllib.urlparse now supports empty ports.
This commit is contained in:
commit
5d83d1a814
3 changed files with 47 additions and 24 deletions
|
@ -394,6 +394,16 @@ class UrlParseTestCase(unittest.TestCase):
|
||||||
('http://[::12.34.56.78]/foo/', '::12.34.56.78', None),
|
('http://[::12.34.56.78]/foo/', '::12.34.56.78', None),
|
||||||
('http://[::ffff:12.34.56.78]/foo/',
|
('http://[::ffff:12.34.56.78]/foo/',
|
||||||
'::ffff:12.34.56.78', None),
|
'::ffff:12.34.56.78', None),
|
||||||
|
('http://Test.python.org:/foo/', 'test.python.org', None),
|
||||||
|
('http://12.34.56.78:/foo/', '12.34.56.78', None),
|
||||||
|
('http://[::1]:/foo/', '::1', None),
|
||||||
|
('http://[dead:beef::1]:/foo/', 'dead:beef::1', None),
|
||||||
|
('http://[dead:beef::]:/foo/', 'dead:beef::', None),
|
||||||
|
('http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:/foo/',
|
||||||
|
'dead:beef:cafe:5417:affe:8fa3:deaf:feed', None),
|
||||||
|
('http://[::12.34.56.78]:/foo/', '::12.34.56.78', None),
|
||||||
|
('http://[::ffff:12.34.56.78]:/foo/',
|
||||||
|
'::ffff:12.34.56.78', None),
|
||||||
]
|
]
|
||||||
def _encode(t):
|
def _encode(t):
|
||||||
return t[0].encode('ascii'), t[1].encode('ascii'), t[2]
|
return t[0].encode('ascii'), t[1].encode('ascii'), t[2]
|
||||||
|
@ -739,17 +749,25 @@ class UrlParseTestCase(unittest.TestCase):
|
||||||
errors="ignore")
|
errors="ignore")
|
||||||
self.assertEqual(result, [('key', '\u0141-')])
|
self.assertEqual(result, [('key', '\u0141-')])
|
||||||
|
|
||||||
|
def test_splitport(self):
|
||||||
|
splitport = urllib.parse.splitport
|
||||||
|
self.assertEqual(splitport('parrot:88'), ('parrot', '88'))
|
||||||
|
self.assertEqual(splitport('parrot'), ('parrot', None))
|
||||||
|
self.assertEqual(splitport('parrot:'), ('parrot', None))
|
||||||
|
self.assertEqual(splitport('127.0.0.1'), ('127.0.0.1', None))
|
||||||
|
self.assertEqual(splitport('parrot:cheese'), ('parrot:cheese', None))
|
||||||
|
|
||||||
def test_splitnport(self):
|
def test_splitnport(self):
|
||||||
# Normal cases are exercised by other tests; ensure that we also
|
splitnport = urllib.parse.splitnport
|
||||||
# catch cases with no port specified. (testcase ensuring coverage)
|
self.assertEqual(splitnport('parrot:88'), ('parrot', 88))
|
||||||
result = urllib.parse.splitnport('parrot:88')
|
self.assertEqual(splitnport('parrot'), ('parrot', -1))
|
||||||
self.assertEqual(result, ('parrot', 88))
|
self.assertEqual(splitnport('parrot', 55), ('parrot', 55))
|
||||||
result = urllib.parse.splitnport('parrot')
|
self.assertEqual(splitnport('parrot:'), ('parrot', -1))
|
||||||
self.assertEqual(result, ('parrot', -1))
|
self.assertEqual(splitnport('parrot:', 55), ('parrot', 55))
|
||||||
result = urllib.parse.splitnport('parrot', 55)
|
self.assertEqual(splitnport('127.0.0.1'), ('127.0.0.1', -1))
|
||||||
self.assertEqual(result, ('parrot', 55))
|
self.assertEqual(splitnport('127.0.0.1', 55), ('127.0.0.1', 55))
|
||||||
result = urllib.parse.splitnport('parrot:')
|
self.assertEqual(splitnport('parrot:cheese'), ('parrot', None))
|
||||||
self.assertEqual(result, ('parrot', None))
|
self.assertEqual(splitnport('parrot:cheese', 55), ('parrot', None))
|
||||||
|
|
||||||
def test_splitquery(self):
|
def test_splitquery(self):
|
||||||
# Normal cases are exercised by other tests; ensure that we also
|
# Normal cases are exercised by other tests; ensure that we also
|
||||||
|
|
|
@ -182,10 +182,10 @@ class _NetlocResultMixinStr(_NetlocResultMixinBase, _ResultMixinStr):
|
||||||
_, have_open_br, bracketed = hostinfo.partition('[')
|
_, have_open_br, bracketed = hostinfo.partition('[')
|
||||||
if have_open_br:
|
if have_open_br:
|
||||||
hostname, _, port = bracketed.partition(']')
|
hostname, _, port = bracketed.partition(']')
|
||||||
_, have_port, port = port.partition(':')
|
_, _, port = port.partition(':')
|
||||||
else:
|
else:
|
||||||
hostname, have_port, port = hostinfo.partition(':')
|
hostname, _, port = hostinfo.partition(':')
|
||||||
if not have_port:
|
if not port:
|
||||||
port = None
|
port = None
|
||||||
return hostname, port
|
return hostname, port
|
||||||
|
|
||||||
|
@ -212,10 +212,10 @@ class _NetlocResultMixinBytes(_NetlocResultMixinBase, _ResultMixinBytes):
|
||||||
_, have_open_br, bracketed = hostinfo.partition(b'[')
|
_, have_open_br, bracketed = hostinfo.partition(b'[')
|
||||||
if have_open_br:
|
if have_open_br:
|
||||||
hostname, _, port = bracketed.partition(b']')
|
hostname, _, port = bracketed.partition(b']')
|
||||||
_, have_port, port = port.partition(b':')
|
_, _, port = port.partition(b':')
|
||||||
else:
|
else:
|
||||||
hostname, have_port, port = hostinfo.partition(b':')
|
hostname, _, port = hostinfo.partition(b':')
|
||||||
if not have_port:
|
if not port:
|
||||||
port = None
|
port = None
|
||||||
return hostname, port
|
return hostname, port
|
||||||
|
|
||||||
|
@ -898,10 +898,13 @@ def splitport(host):
|
||||||
"""splitport('host:port') --> 'host', 'port'."""
|
"""splitport('host:port') --> 'host', 'port'."""
|
||||||
global _portprog
|
global _portprog
|
||||||
if _portprog is None:
|
if _portprog is None:
|
||||||
_portprog = re.compile('^(.*):([0-9]+)$')
|
_portprog = re.compile('^(.*):([0-9]*)$')
|
||||||
|
|
||||||
match = _portprog.match(host)
|
match = _portprog.match(host)
|
||||||
if match: return match.group(1, 2)
|
if match:
|
||||||
|
host, port = match.groups()
|
||||||
|
if port:
|
||||||
|
return host, port
|
||||||
return host, None
|
return host, None
|
||||||
|
|
||||||
_nportprog = None
|
_nportprog = None
|
||||||
|
@ -917,12 +920,12 @@ def splitnport(host, defport=-1):
|
||||||
match = _nportprog.match(host)
|
match = _nportprog.match(host)
|
||||||
if match:
|
if match:
|
||||||
host, port = match.group(1, 2)
|
host, port = match.group(1, 2)
|
||||||
try:
|
if port:
|
||||||
if not port: raise ValueError("no digits")
|
try:
|
||||||
nport = int(port)
|
nport = int(port)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
nport = None
|
nport = None
|
||||||
return host, nport
|
return host, nport
|
||||||
return host, defport
|
return host, defport
|
||||||
|
|
||||||
_queryprog = None
|
_queryprog = None
|
||||||
|
|
|
@ -25,6 +25,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #20270: urllib.urlparse now supports empty ports.
|
||||||
|
|
||||||
- Issue #20243: TarFile no longer raise ReadError when opened in write mode.
|
- Issue #20243: TarFile no longer raise ReadError when opened in write mode.
|
||||||
|
|
||||||
- Issue #20238: TarFile opened with external fileobj and "w:gz" mode didn't
|
- Issue #20238: TarFile opened with external fileobj and "w:gz" mode didn't
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue