import os
import io
+import ftplib
import socket
import array
import sys
self.ftpwrapper = MockFTPWrapper(self.data)
return self.ftpwrapper
- import ftplib
data = "rheum rhaponicum"
h = NullFTPHandler(data)
h.parent = MockOpener()
self.assertEqual(headers.get("Content-type"), mimetype)
self.assertEqual(int(headers["Content-length"]), len(data))
+ def test_ftp_error(self):
+ class ErrorFTPHandler(urllib.request.FTPHandler):
+ def __init__(self, exception):
+ self._exception = exception
+
+ def connect_ftp(self, user, passwd, host, port, dirs,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
+ raise self._exception
+
+ exception = ftplib.error_perm(
+ "500 OOPS: cannot change directory:/nonexistent")
+ h = ErrorFTPHandler(exception)
+ urlopen = urllib.request.build_opener(h).open
+ try:
+ urlopen("ftp://www.pythontest.net/")
+ except urllib.error.URLError as raised:
+ self.assertEqual(raised.reason,
+ f"ftp error: {exception.args[0]}")
+ else:
+ self.fail("Did not raise ftplib exception")
+
def test_file(self):
import email.utils
h = urllib.request.FileHandler()
headers = email.message_from_string(headers)
return addinfourl(fp, headers, req.full_url)
except ftplib.all_errors as exp:
- raise URLError(exp) from exp
+ raise URLError(f"ftp error: {exp}") from exp
def connect_ftp(self, user, passwd, host, port, dirs, timeout):
return ftpwrapper(user, passwd, host, port, dirs, timeout,