From c900b4379b9bda3fb8491fa3bd96fdfa2f163a3f Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:18:43 -0500 Subject: [PATCH 01/10] Added new HTTPError handing mechanisms. --- requests/core.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/requests/core.py b/requests/core.py index 6fcfca03..8c63561f 100644 --- a/requests/core.py +++ b/requests/core.py @@ -159,7 +159,6 @@ class Request(object): if isinstance(self.params, dict): params = urllib.urlencode(self.params) else: - params = self.params req = _Request(("%s?%s" % (self.url, params)), method=self.method) @@ -172,11 +171,11 @@ class Request(object): try: resp = opener(req) self._build_response(resp) - success = True + self.response.ok = True except urllib2.HTTPError as why: self._build_response(why) - success = False + self.response.error = why elif self.method == 'PUT': @@ -204,11 +203,11 @@ class Request(object): resp = opener(req) self._build_response(resp) - success = True + self.response.ok = True except urllib2.HTTPError as why: self._build_response(why) - success = False + self.response.error = why elif self.method == 'POST': @@ -233,21 +232,19 @@ class Request(object): req.data = self.data try: - opener = self._get_opener() resp = opener(req) self._build_response(resp) - success = True + self.response.ok = True except urllib2.HTTPError as why: self._build_response(why) - success = False - + self.response.error = why - self.sent = True if success else False + self.sent = self.response.ok - return success + return self.sent class Response(object): @@ -261,9 +258,20 @@ class Response(object): self.status_code = None self.headers = dict() self.url = None + self.ok = False + self.error = False def __repr__(self): return '' % (self.status_code) + + def __nonzero__(self): + """Returns true if status_code is 'OK'.""" + return not self.error + + def raise_for_response(self): + """Raises stored HTTPError if one exists.""" + if self.error: + raise self.error From ce122cc811e937d72272c28231065363d351d3d1 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:22:11 -0500 Subject: [PATCH 02/10] None, not False --- requests/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/core.py b/requests/core.py index 8c63561f..383b7bb6 100644 --- a/requests/core.py +++ b/requests/core.py @@ -259,7 +259,7 @@ class Response(object): self.headers = dict() self.url = None self.ok = False - self.error = False + self.error = None def __repr__(self): return '' % (self.status_code) From 748633d616db4e27bb00530d8db5afa660460a67 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:26:07 -0500 Subject: [PATCH 03/10] raise_for_status is better --- requests/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/core.py b/requests/core.py index 383b7bb6..1ddd2bd3 100644 --- a/requests/core.py +++ b/requests/core.py @@ -268,7 +268,7 @@ class Response(object): """Returns true if status_code is 'OK'.""" return not self.error - def raise_for_response(self): + def raise_for_status(self): """Raises stored HTTPError if one exists.""" if self.error: raise self.error From 6d8a531e87efabdbfa734bd9f70e7220623c1cf7 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:26:44 -0500 Subject: [PATCH 04/10] HTTPError changes are going down in history --- HISTORY.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/HISTORY.rst b/HISTORY.rst index f48abe0f..6c630039 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,6 +1,16 @@ History ------- +0.2.3 (2011-02-15) +++++++++++++++++++ + +* New HTTPHandling Methods + - Reponse.__nonzero__ (false if bad HTTP Status) + - Response.ok (True if expected HTTP Status) + - Response.error (Logged HTTPError if bad HTTP Status) + - Reponse.raise_for_status() (Raises stored HTTPError) + + 0.2.2 (2011-02-14) ++++++++++++++++++ From 4f1301f6ad24505e67125ee3b316c8e4cdbdf409 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:36:34 -0500 Subject: [PATCH 05/10] Now Requests has it's own HTTPError --- requests/core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/requests/core.py b/requests/core.py index 1ddd2bd3..731c63dd 100644 --- a/requests/core.py +++ b/requests/core.py @@ -13,6 +13,7 @@ import urllib import urllib2 +from urllib2 import HTTPError try: import eventlet From 7ad08c5edaf68330cb9753634f4b80dfca00f686 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:37:21 -0500 Subject: [PATCH 06/10] New tests for new HTTP STATUS Handling --- test_requests.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/test_requests.py b/test_requests.py index 35bb9f65..3199bc77 100644 --- a/test_requests.py +++ b/test_requests.py @@ -1,7 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- - import unittest from cStringIO import StringIO @@ -55,7 +54,24 @@ class RequestsTestSuite(unittest.TestCase): post2 = requests.post(bin.url, files={'some': StringIO('data')}) self.assertEqual(post2.status_code, 201) + def test_nonzero_evaluation(self): + r = requests.get('http://google.com/some-404-url') + self.assertEqual(bool(r), False) + + r = requests.get('http://google.com/') + self.assertEqual(bool(r), True) + def test_request_ok_set(self): + r = requests.get('http://google.com/some-404-url') + self.assertEqual(r.ok, False) + + def test_status_raising(self): + r = requests.get('http://google.com/some-404-url') + self.assertRaises(requests.HTTPError, r.raise_for_status) + + r = requests.get('http://google.com/') + self.assertFalse(r.error) + r.raise_for_status() if __name__ == '__main__': unittest.main() From 4ad73c3655a2c0fd3862e7803d02f1ff4006e18b Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:42:05 -0500 Subject: [PATCH 07/10] leave room for _ --- test_requests.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test_requests.py b/test_requests.py index 3199bc77..2fda7ee8 100644 --- a/test_requests.py +++ b/test_requests.py @@ -20,22 +20,27 @@ class RequestsTestSuite(unittest.TestCase): def test_invalid_url(self): self.assertRaises(ValueError, requests.get, 'hiwpefhipowhefopw') + def test_HTTP_200_OK_GET(self): r = requests.get('http://google.com') self.assertEqual(r.status_code, 200) + def test_HTTPS_200_OK_GET(self): r = requests.get('https://google.com') self.assertEqual(r.status_code, 200) + def test_HTTP_200_OK_HEAD(self): r = requests.head('http://google.com') self.assertEqual(r.status_code, 200) + def test_HTTPS_200_OK_HEAD(self): r = requests.head('https://google.com') self.assertEqual(r.status_code, 200) + def test_AUTH_HTTPS_200_OK_GET(self): auth = requests.AuthObject('requeststest', 'requeststest') url = 'https://convore.com/api/account/verify.json' @@ -43,6 +48,7 @@ class RequestsTestSuite(unittest.TestCase): self.assertEqual(r.status_code, 200) + def test_POSTBIN_GET_POST_FILES(self): bin = requests.post('http://www.postbin.org/') @@ -54,6 +60,7 @@ class RequestsTestSuite(unittest.TestCase): post2 = requests.post(bin.url, files={'some': StringIO('data')}) self.assertEqual(post2.status_code, 201) + def test_nonzero_evaluation(self): r = requests.get('http://google.com/some-404-url') self.assertEqual(bool(r), False) @@ -61,10 +68,12 @@ class RequestsTestSuite(unittest.TestCase): r = requests.get('http://google.com/') self.assertEqual(bool(r), True) + def test_request_ok_set(self): r = requests.get('http://google.com/some-404-url') self.assertEqual(r.ok, False) + def test_status_raising(self): r = requests.get('http://google.com/some-404-url') self.assertRaises(requests.HTTPError, r.raise_for_status) @@ -73,5 +82,6 @@ class RequestsTestSuite(unittest.TestCase): self.assertFalse(r.error) r.raise_for_status() + if __name__ == '__main__': unittest.main() From 83a9bcf1a1ad4b5bf086c2ca332623ae65fc6f75 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:44:52 -0500 Subject: [PATCH 08/10] Updating AUTHORS --- AUTHORS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 3fc077d3..0eb7b2f3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -10,4 +10,5 @@ Development Lead Patches and Suggestions ``````````````````````` -- Various Pocoo Members \ No newline at end of file +- Various Pocoo Members +- Chris Adams From 933cf49daa524bb1ea89e82ecbcb5c57d8ae03e2 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:45:54 -0500 Subject: [PATCH 09/10] v0.2.3 --- requests/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requests/core.py b/requests/core.py index 731c63dd..05b7619d 100644 --- a/requests/core.py +++ b/requests/core.py @@ -34,8 +34,8 @@ from .packages.poster.streaminghttp import register_openers __title__ = 'requests' -__version__ = '0.2.2' -__build__ = 0x000202 +__version__ = '0.2.3' +__build__ = 0x000203 __author__ = 'Kenneth Reitz' __license__ = 'ISC' __copyright__ = 'Copyright 2011 Kenneth Reitz' From d5256802d468e997f71ba2ff3069b327cf978a5e Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 15 Feb 2011 09:46:46 -0500 Subject: [PATCH 10/10] v0.2.3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 727834c5..58edb452 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ required = [] setup( name='requests', - version='0.2.2', + version='0.2.3', description='Awesome Python HTTP Library that\'s actually usable.', long_description=open('README.rst').read() + '\n\n' + open('HISTORY.rst').read(),