diff options
author | Jeremy Hylton <32469542+jeremyhylton@users.noreply.github.com> | 2024-08-20 00:35:05 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-20 00:35:05 (GMT) |
commit | 77133f570dcad599e5b1199c39e999bfac959ae2 (patch) | |
tree | 5429953945e935f54bca37487bf9a2867b8d8198 /Lib/test | |
parent | 0480052ea1567d50e9772b836bc9f90bee11c2f7 (diff) | |
download | cpython-77133f570dcad599e5b1199c39e999bfac959ae2.zip cpython-77133f570dcad599e5b1199c39e999bfac959ae2.tar.gz cpython-77133f570dcad599e5b1199c39e999bfac959ae2.tar.bz2 |
gh-122909: Pass ftp error strings to URLError constructor (#122913)
* pass the original string error message from the ftplib error to URLError()
* Update request.py
Change error string for ftp error to be consistent with other errors reported for ftp
* Add NEWS entry for change to urllib.request for ftp errors.
* Track the change in the ftp error message in the test.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_urllib2.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index eed0599..19179fd 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -8,6 +8,7 @@ from unittest import mock import os import io +import ftplib import socket import array import sys @@ -754,7 +755,6 @@ class HandlerTests(unittest.TestCase): self.ftpwrapper = MockFTPWrapper(self.data) return self.ftpwrapper - import ftplib data = "rheum rhaponicum" h = NullFTPHandler(data) h.parent = MockOpener() @@ -794,6 +794,27 @@ class HandlerTests(unittest.TestCase): 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() |