diff options
author | Senthil Kumaran <senthil@uthcode.com> | 2012-12-23 17:12:13 (GMT) |
---|---|---|
committer | Senthil Kumaran <senthil@uthcode.com> | 2012-12-23 17:12:13 (GMT) |
commit | 0a6b9eca683068d5aabba255370b5ee8e25d7850 (patch) | |
tree | 101e883700ecf9e6ba00234a5143d6b93361d719 /Lib | |
parent | e3dff55a5e86073c1400dee138a6e8959cfe2b8e (diff) | |
parent | 41e66a26b0b86291f5fb846ffe2dc641b5ced65a (diff) | |
download | cpython-0a6b9eca683068d5aabba255370b5ee8e25d7850.zip cpython-0a6b9eca683068d5aabba255370b5ee8e25d7850.tar.gz cpython-0a6b9eca683068d5aabba255370b5ee8e25d7850.tar.bz2 |
merge from 3.2
Fix Issue15701 - HTTPError info method call raises AttributeError. Fix that to return headers correctly
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_urllib2.py | 40 | ||||
-rw-r--r-- | Lib/urllib/error.py | 4 |
2 files changed, 32 insertions, 12 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 2d94ba4..ccd5419 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -1495,18 +1495,34 @@ class RequestTests(unittest.TestCase): req = Request(url) self.assertEqual(req.get_full_url(), url) -def test_HTTPError_interface(): - """ - Issue 13211 reveals that HTTPError didn't implement the URLError - interface even though HTTPError is a subclass of URLError. - - >>> msg = 'something bad happened' - >>> url = code = hdrs = fp = None - >>> err = urllib.error.HTTPError(url, code, msg, hdrs, fp) - >>> assert hasattr(err, 'reason') - >>> err.reason - 'something bad happened' - """ + def test_HTTPError_interface(self): + """ + Issue 13211 reveals that HTTPError didn't implement the URLError + interface even though HTTPError is a subclass of URLError. + + >>> msg = 'something bad happened' + >>> url = code = hdrs = fp = None + >>> err = urllib.error.HTTPError(url, code, msg, hdrs, fp) + >>> assert hasattr(err, 'reason') + >>> err.reason + 'something bad happened' + """ + + def test_HTTPError_interface_call(self): + """ + Issue 15701 - HTTPError interface has info method available from URLError + """ + err = urllib.request.HTTPError(msg="something bad happened", url=None, + code=None, hdrs='Content-Length:42', fp=None) + self.assertTrue(hasattr(err, 'reason')) + assert hasattr(err, 'reason') + assert hasattr(err, 'info') + assert callable(err.info) + try: + err.info() + except AttributeError: + self.fail('err.info call failed.') + self.assertEqual(err.info(), "Content-Length:42") def test_main(verbose=None): from test import test_urllib2 diff --git a/Lib/urllib/error.py b/Lib/urllib/error.py index c1dfc40..b712ebb 100644 --- a/Lib/urllib/error.py +++ b/Lib/urllib/error.py @@ -61,6 +61,10 @@ class HTTPError(URLError, urllib.response.addinfourl): def reason(self): return self.msg + def info(self): + return self.hdrs + + # exception raised when downloaded size does not match content-length class ContentTooShortError(URLError): def __init__(self, message, content): |