summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSenthil Kumaran <senthil@uthcode.com>2012-12-23 17:12:13 (GMT)
committerSenthil Kumaran <senthil@uthcode.com>2012-12-23 17:12:13 (GMT)
commit0a6b9eca683068d5aabba255370b5ee8e25d7850 (patch)
tree101e883700ecf9e6ba00234a5143d6b93361d719 /Lib
parente3dff55a5e86073c1400dee138a6e8959cfe2b8e (diff)
parent41e66a26b0b86291f5fb846ffe2dc641b5ced65a (diff)
downloadcpython-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.py40
-rw-r--r--Lib/urllib/error.py4
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):