gh-98778: Update HTTPError to initialize properly even if fp is None (gh-99966)

This commit is contained in:
Dong-hee Na 2022-12-08 11:20:34 +09:00 committed by GitHub
parent 3c89202247
commit dc8a86893d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 7 deletions

View File

@ -1824,6 +1824,10 @@ class MiscTests(unittest.TestCase):
expected_errmsg = '<HTTPError %s: %r>' % (err.code, err.msg)
self.assertEqual(repr(err), expected_errmsg)
def test_gh_98778(self):
x = urllib.error.HTTPError("url", 405, "METHOD NOT ALLOWED", None, None)
self.assertEqual(getattr(x, "__notes__", ()), ())
def test_parse_proxy(self):
parse_proxy_test_cases = [
('proxy.example.com',

View File

@ -10,7 +10,7 @@ responses, with a status code, headers, and a body. In some contexts,
an application may want to handle an exception like a regular
response.
"""
import io
import urllib.response
__all__ = ['URLError', 'HTTPError', 'ContentTooShortError']
@ -42,12 +42,9 @@ class HTTPError(URLError, urllib.response.addinfourl):
self.hdrs = hdrs
self.fp = fp
self.filename = url
# The addinfourl classes depend on fp being a valid file
# object. In some cases, the HTTPError may not have a valid
# file object. If this happens, the simplest workaround is to
# not initialize the base classes.
if fp is not None:
self.__super_init(fp, hdrs, url, code)
if fp is None:
fp = io.StringIO()
self.__super_init(fp, hdrs, url, code)
def __str__(self):
return 'HTTP Error %s: %s' % (self.code, self.msg)

View File

@ -0,0 +1,2 @@
Update :exc:`~urllib.error.HTTPError` to be initialized properly, even if
the ``fp`` is ``None``. Patch by Dong-hee Na.