From c4f9340fb4df41d7a8be66ee41c40bfed64ec6d6 Mon Sep 17 00:00:00 2001 From: Dmitry Medvinsky Date: Fri, 1 Mar 2013 12:43:39 +0400 Subject: [PATCH] Add ability to pass `response` to `HTTPError()` Just a little refactoring, but it seems nicer to me to be able to pass the response when constructing the `HTTPError` instance instead of constructing it and then changing the member variable. --- AUTHORS.rst | 1 + requests/exceptions.py | 6 +++++- requests/models.py | 4 +--- test_requests.py | 12 +++++++++++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 9963923..4395b3b 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -122,3 +122,4 @@ Patches and Suggestions - Johnny Goodnow - Denis Ryzhkov - Wilfred Hughes @dontYetKnow +- Dmitry Medvinsky diff --git a/requests/exceptions.py b/requests/exceptions.py index 6759af5..c0588f6 100644 --- a/requests/exceptions.py +++ b/requests/exceptions.py @@ -16,7 +16,11 @@ class RequestException(RuntimeError): class HTTPError(RequestException): """An HTTP error occurred.""" - response = None + + def __init__(self, *args, **kwargs): + """ Initializes HTTPError with optional `response` object. """ + self.response = kwargs.pop('response', None) + super(HTTPError, self).__init__(*args, **kwargs) class ConnectionError(RequestException): diff --git a/requests/models.py b/requests/models.py index faa0cbe..3d27d0c 100644 --- a/requests/models.py +++ b/requests/models.py @@ -657,9 +657,7 @@ class Response(object): http_error_msg = '%s Server Error: %s' % (self.status_code, self.reason) if http_error_msg: - http_error = HTTPError(http_error_msg) - http_error.response = self - raise http_error + raise HTTPError(http_error_msg, response=self) def close(self): return self.raw.release_conn() diff --git a/test_requests.py b/test_requests.py index 0a2e643..e40d44f 100644 --- a/test_requests.py +++ b/test_requests.py @@ -385,7 +385,17 @@ class RequestsTestCase(unittest.TestCase): # undo monkey patch HTTPConnectionPool.urlopen = old_urlopen - + + def test_http_error(self): + error = requests.exceptions.HTTPError() + self.assertEqual(error.response, None) + response = requests.Response() + error = requests.exceptions.HTTPError(response=response) + self.assertEqual(error.response, response) + error = requests.exceptions.HTTPError('message', response=response) + self.assertEqual(str(error), 'message') + self.assertEqual(error.response, response) + if __name__ == '__main__': unittest.main() -- 2.7.4