From 50a65a7415394ad85b8d96e33857297c79a2a278 Mon Sep 17 00:00:00 2001 From: Cory Benfield Date: Thu, 28 May 2015 18:04:24 +0100 Subject: [PATCH 1/5] Convert method to native str in request --- requests/models.py | 2 +- requests/sessions.py | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/requests/models.py b/requests/models.py index e2055fe2..180d448d 100644 --- a/requests/models.py +++ b/requests/models.py @@ -230,7 +230,7 @@ class Request(RequestHooksMixin): for (k, v) in list(hooks.items()): self.register_hook(event=k, hook=v) - self.method = method + self.method = to_native_string(method) self.url = url self.headers = headers self.files = files diff --git a/requests/sessions.py b/requests/sessions.py index 820919ee..4c744eea 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -432,9 +432,6 @@ class Session(SessionRedirectMixin): :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. """ - - method = to_native_string(method) - # Create the Request. req = Request( method = method.upper(), From ff8153d9c56bfa62782fb99743219d0b02b512bb Mon Sep 17 00:00:00 2001 From: Cory Benfield Date: Thu, 28 May 2015 18:33:24 +0100 Subject: [PATCH 2/5] Better default for request method --- requests/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/requests/models.py b/requests/models.py index 180d448d..de48ee72 100644 --- a/requests/models.py +++ b/requests/models.py @@ -226,6 +226,9 @@ class Request(RequestHooksMixin): params = {} if params is None else params hooks = {} if hooks is None else hooks + # Default empty string for method. + method = '' if method is None else method + self.hooks = default_hooks() for (k, v) in list(hooks.items()): self.register_hook(event=k, hook=v) From 4aa4f82b37aeb272637fafeff498014af1c11c6b Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Sat, 30 May 2015 09:32:26 -0500 Subject: [PATCH 3/5] Make the tests pass the method to Request --- requests/models.py | 3 --- test_requests.py | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/requests/models.py b/requests/models.py index de48ee72..180d448d 100644 --- a/requests/models.py +++ b/requests/models.py @@ -226,9 +226,6 @@ class Request(RequestHooksMixin): params = {} if params is None else params hooks = {} if hooks is None else hooks - # Default empty string for method. - method = '' if method is None else method - self.hooks = default_hooks() for (k, v) in list(hooks.items()): self.register_hook(event=k, hook=v) diff --git a/test_requests.py b/test_requests.py index cad8c055..81a661f5 100755 --- a/test_requests.py +++ b/test_requests.py @@ -89,7 +89,7 @@ class RequestsTestCase(unittest.TestCase): requests.get('http://') def test_basic_building(self): - req = requests.Request() + req = requests.Request(method='GET') req.url = 'http://kennethreitz.org/' req.data = {'life': '42'} @@ -813,7 +813,7 @@ class RequestsTestCase(unittest.TestCase): assert ('user', 'pass#pass') == requests.utils.get_auth_from_url(url) def test_cannot_send_unprepared_requests(self): - r = requests.Request(url=HTTPBIN) + r = requests.Request(method='GET', url=HTTPBIN) with pytest.raises(ValueError): requests.Session().send(r) From 8c4d4f1af3a501ae0beec5e270f3206cda5c4842 Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Tue, 2 Jun 2015 14:02:46 -0500 Subject: [PATCH 4/5] Move handling of method to PreparedRequest --- requests/models.py | 7 ++++--- test_requests.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/requests/models.py b/requests/models.py index 180d448d..ac99822f 100644 --- a/requests/models.py +++ b/requests/models.py @@ -230,7 +230,7 @@ class Request(RequestHooksMixin): for (k, v) in list(hooks.items()): self.register_hook(event=k, hook=v) - self.method = to_native_string(method) + self.method = method self.url = url self.headers = headers self.files = files @@ -328,8 +328,9 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): def prepare_method(self, method): """Prepares the given HTTP method.""" self.method = method - if self.method is not None: - self.method = self.method.upper() + if self.method is None: + raise ValueError('Request method cannot be "None"') + self.method = to_native_string(self.method).upper() def prepare_url(self, url, params): """Prepares the given HTTP URL.""" diff --git a/test_requests.py b/test_requests.py index 81a661f5..e8b64b4c 100755 --- a/test_requests.py +++ b/test_requests.py @@ -1617,6 +1617,16 @@ def test_prepare_unicode_url(): assert_copy(p, p.copy()) +def test_prepare_requires_a_request_method(): + req = Request() + with pytest.raises(ValueError): + req.prepare() + + prepped = PreparedRequest() + with pytest.raises(ValueError): + prepped.prepare() + + def test_urllib3_retries(): from requests.packages.urllib3.util import Retry s = requests.Session() From 42944007338bdaa570a3ab25aafc279ef150d169 Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Tue, 2 Jun 2015 20:13:22 -0500 Subject: [PATCH 5/5] Qualify classname in tests --- test_requests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_requests.py b/test_requests.py index e8b64b4c..1053666e 100755 --- a/test_requests.py +++ b/test_requests.py @@ -1618,7 +1618,7 @@ def test_prepare_unicode_url(): def test_prepare_requires_a_request_method(): - req = Request() + req = requests.Request() with pytest.raises(ValueError): req.prepare()