From 115b51e68c95d5aeea10c40719cf770303f4da61 Mon Sep 17 00:00:00 2001 From: Bryan Helmig Date: Wed, 4 Jan 2012 22:08:01 -0600 Subject: [PATCH] add eager mode for raising errors immediately --- AUTHORS.rst | 1 + requests/defaults.py | 2 ++ requests/models.py | 3 +++ test_requests.py | 10 ++++++++++ 4 files changed, 16 insertions(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index b9c3a64..e61f8d9 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -68,3 +68,4 @@ Patches and Suggestions - Christopher Davis - Ori Livneh - Jason Emerick +- Bryan Helmig diff --git a/requests/defaults.py b/requests/defaults.py index e8db67a..8b3d683 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -15,6 +15,7 @@ Configurations: :decode_unicode: Decode unicode responses automatically? :keep_alive: Reuse HTTP Connections? :max_retries: The number of times a request should be retried in the event of a connection failure. +:eager_mode: If true, Requests will raise errors immediately. :safe_mode: If true, Requests will catch all errors. :pool_maxsize: The maximium size of an HTTP connection pool. :pool_connections: The number of active HTTP connection pools to use. @@ -38,5 +39,6 @@ defaults['decode_unicode'] = True defaults['pool_connections'] = 10 defaults['pool_maxsize'] = 10 defaults['max_retries'] = 0 +defaults['eager_mode'] = False defaults['safe_mode'] = False defaults['keep_alive'] = True diff --git a/requests/models.py b/requests/models.py index 17403a6..f59019c 100644 --- a/requests/models.py +++ b/requests/models.py @@ -525,6 +525,9 @@ class Request(object): if prefetch: # Save the response. self.response.content + + if self.config.get('eager_mode'): + self.response.raise_for_status() return self.sent diff --git a/test_requests.py b/test_requests.py index b3e55c8..c388dea 100755 --- a/test_requests.py +++ b/test_requests.py @@ -279,6 +279,16 @@ class RequestsTestSuite(unittest.TestCase): r.raise_for_status() + def test_default_status_raising(self): + config = {'eager_mode': True} + args = [httpbin('status', '404')] + kwargs = dict(config=config) + self.assertRaises(HTTPError, requests.get, *args, **kwargs) + + r = requests.get(httpbin('status', '200')) + self.assertEqual(r.status_code, 200) + + def test_decompress_gzip(self): r = requests.get(httpbin('gzip')) -- 2.34.1