add eager mode for raising errors immediately
authorBryan Helmig <bryan@bryanhelmig.com>
Thu, 5 Jan 2012 04:08:01 +0000 (22:08 -0600)
committerBryan Helmig <bryan@bryanhelmig.com>
Thu, 5 Jan 2012 04:08:01 +0000 (22:08 -0600)
AUTHORS.rst
requests/defaults.py
requests/models.py
test_requests.py

index b9c3a6439d388c87dedb547d70d3cc86b89b9658..e61f8d99d8e680b7ccf3999b00c87817ab257c71 100644 (file)
@@ -68,3 +68,4 @@ Patches and Suggestions
 - Christopher Davis
 - Ori Livneh
 - Jason Emerick
+- Bryan Helmig
index e8db67ab32a06f86c2e8c77cc3ce191da6a90932..8b3d68372bff33c8ce2845b95a506757461bc0bf 100644 (file)
@@ -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
index 17403a690c91ee5c4ccecef8fb9a19f2136e5623..f59019c8b73d2ca1af95e92823281ae6703b5eda 100644 (file)
@@ -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
 
index b3e55c8cd981a76e8b662687e0216ba0b00134be..c388deafb2f9dded009b3c5c720e9151724e517f 100755 (executable)
@@ -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'))