From 5962cce05065c7d98a42f50b07c0d58c1c61790f Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Mon, 10 Dec 2012 02:09:35 -0800 Subject: Fix Issue15701 : add .headers attribute to urllib.error.HTTPError --- Doc/library/urllib.error.rst | 7 +++++++ Lib/test/test_urllib2.py | 6 +++++- Lib/urllib/error.py | 8 ++++++++ Misc/NEWS | 3 +++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Doc/library/urllib.error.rst b/Doc/library/urllib.error.rst index 9c3fe91..7bd04b1 100644 --- a/Doc/library/urllib.error.rst +++ b/Doc/library/urllib.error.rst @@ -45,6 +45,13 @@ The following exceptions are raised by :mod:`urllib.error` as appropriate: This is usually a string explaining the reason for this error. + .. attribute:: headers + + The HTTP response headers for the HTTP request that cause the + :exc:`HTTPError`. + + .. versionadded:: 3.4 + .. exception:: ContentTooShortError(msg, content) This exception is raised when the :func:`urlretrieve` function detects that diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 2261d57..33042ed 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -1539,11 +1539,15 @@ def test_HTTPError_interface(): interface even though HTTPError is a subclass of URLError. >>> msg = 'something bad happened' - >>> url = code = hdrs = fp = None + >>> url = code = fp = None + >>> hdrs = 'Content-Length: 42' >>> err = urllib.error.HTTPError(url, code, msg, hdrs, fp) >>> assert hasattr(err, 'reason') >>> err.reason 'something bad happened' + >>> assert hasattr(err, 'headers') + >>> err.headers + 'Content-Length: 42' """ def test_main(verbose=None): diff --git a/Lib/urllib/error.py b/Lib/urllib/error.py index c1dfc40..237ed6b 100644 --- a/Lib/urllib/error.py +++ b/Lib/urllib/error.py @@ -61,6 +61,14 @@ class HTTPError(URLError, urllib.response.addinfourl): def reason(self): return self.msg + @property + def headers(self): + return self.hdrs + + @headers.setter + def headers(self, headers): + self.hdrs = headers + # exception raised when downloaded size does not match content-length class ContentTooShortError(URLError): def __init__(self, message, content): diff --git a/Misc/NEWS b/Misc/NEWS index cccb63e..2bad29a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -163,6 +163,9 @@ Core and Builtins Library ------- +- Issue #15701: Add a .headers attribute to urllib.error.HTTPError. Patch + contributed by Berker Peksag. + - Issue #15872: Fix 3.3 regression introduced by the new fd-based shutil.rmtree that caused it to not ignore certain errors when ignore_errors was set. Patch by Alessandro Moura and Serhiy Storchaka. -- cgit v0.12