Commit 3f7cb5d9 authored by Kurt B. Kaiser's avatar Kurt B. Kaiser

Patch [ 972332 ] urllib2 FTPHandler bugs / John J. Lee

Modified Files:
	urllib2.py test/test_urllib2.py
parent e2465087
...@@ -314,15 +314,12 @@ class HandlerTests(unittest.TestCase): ...@@ -314,15 +314,12 @@ class HandlerTests(unittest.TestCase):
("ftp://localhost/foo/bar/baz.html", ("ftp://localhost/foo/bar/baz.html",
"localhost", ftplib.FTP_PORT, "I", "localhost", ftplib.FTP_PORT, "I",
["foo", "bar"], "baz.html", "text/html"), ["foo", "bar"], "baz.html", "text/html"),
# XXXX Bug: FTPHandler tries to gethostbyname "localhost:80", with the ("ftp://localhost:80/foo/bar/",
# port still there. "localhost", 80, "D",
## ("ftp://localhost:80/foo/bar/", ["foo", "bar"], "", None),
## "localhost", 80, "D", ("ftp://localhost/baz.gif;type=a",
## ["foo", "bar"], "", None), "localhost", ftplib.FTP_PORT, "A",
# XXXX bug: second use of splitattr() in FTPHandler should be splitvalue() [], "baz.gif", None), # XXX really this should guess image/gif
## ("ftp://localhost/baz.gif;type=a",
## "localhost", ftplib.FTP_PORT, "A",
## [], "baz.gif", "image/gif"),
]: ]:
r = h.ftp_open(Request(url)) r = h.ftp_open(Request(url))
# ftp authentication not yet implemented by FTPHandler # ftp authentication not yet implemented by FTPHandler
...@@ -333,7 +330,7 @@ class HandlerTests(unittest.TestCase): ...@@ -333,7 +330,7 @@ class HandlerTests(unittest.TestCase):
self.assertEqual(h.ftpwrapper.filename, filename) self.assertEqual(h.ftpwrapper.filename, filename)
self.assertEqual(h.ftpwrapper.filetype, type_) self.assertEqual(h.ftpwrapper.filetype, type_)
headers = r.info() headers = r.info()
self.assertEqual(headers["Content-type"], mimetype) self.assertEqual(headers.get("Content-type"), mimetype)
self.assertEqual(int(headers["Content-length"]), len(data)) self.assertEqual(int(headers["Content-length"]), len(data))
def test_file(self): def test_file(self):
......
...@@ -116,7 +116,7 @@ except ImportError: ...@@ -116,7 +116,7 @@ except ImportError:
# not sure how many of these need to be gotten rid of # not sure how many of these need to be gotten rid of
from urllib import unwrap, unquote, splittype, splithost, \ from urllib import unwrap, unquote, splittype, splithost, \
addinfourl, splitport, splitgophertype, splitquery, \ addinfourl, splitport, splitgophertype, splitquery, \
splitattr, ftpwrapper, noheaders, splituser, splitpasswd splitattr, ftpwrapper, noheaders, splituser, splitpasswd, splitvalue
# support for FileHandler, proxies via environment variables # support for FileHandler, proxies via environment variables
from urllib import localhost, url2pathname, getproxies from urllib import localhost, url2pathname, getproxies
...@@ -1143,6 +1143,8 @@ class FTPHandler(BaseHandler): ...@@ -1143,6 +1143,8 @@ class FTPHandler(BaseHandler):
host, port = splitport(host) host, port = splitport(host)
if port is None: if port is None:
port = ftplib.FTP_PORT port = ftplib.FTP_PORT
else:
port = int(port)
# username/password handling # username/password handling
user, host = splituser(host) user, host = splituser(host)
...@@ -1168,7 +1170,7 @@ class FTPHandler(BaseHandler): ...@@ -1168,7 +1170,7 @@ class FTPHandler(BaseHandler):
fw = self.connect_ftp(user, passwd, host, port, dirs) fw = self.connect_ftp(user, passwd, host, port, dirs)
type = file and 'I' or 'D' type = file and 'I' or 'D'
for attr in attrs: for attr in attrs:
attr, value = splitattr(attr) attr, value = splitvalue(attr)
if attr.lower() == 'type' and \ if attr.lower() == 'type' and \
value in ('a', 'A', 'i', 'I', 'd', 'D'): value in ('a', 'A', 'i', 'I', 'd', 'D'):
type = value.upper() type = value.upper()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment