From 117813ee2ef730d1338d5cd6d55c389089799002 Mon Sep 17 00:00:00 2001 From: Keyan Pishdadian Date: Sat, 5 Sep 2015 02:30:40 -0400 Subject: [PATCH 1/3] Add prepared request pickling tests --- tests/test_requests.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/test_requests.py b/tests/test_requests.py index 6292f9d7..f665fc25 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1053,6 +1053,43 @@ class TestRequests: assert r.request.url == pr.request.url assert r.request.headers == pr.request.headers + def test_prepared_request_is_pickleable(self): + p = requests.Request('GET', httpbin('get')).prepare() + + # Verify we can pickle the request. + assert pickle.dumps(p) + r = pickle.dumps(p) + + # Verify we can use the pickled request. + assert pickle.loads(r) + r = pickle.loads(r) + + # Verify we can use the unpickled request. + s = requests.Session() + r = s.send(r) + + assert r.status_code == 200 + + def test_prepared_request_with_file_is_pickleable(self): + data = {'a': 0.0} + files = {'b': 'foo'} + r = requests.Request('POST', httpbin('post'), data=data, files=files) + p = r.prepare() + + # Verify we can pickle the request. + assert pickle.dumps(p) + r = pickle.dumps(p) + + # Verify we can use the pickled request. + assert pickle.loads(r) + r = pickle.loads(r) + + # Verify we can use the unpickled request. + s = requests.Session() + r = s.send(r) + + assert r.status_code == 200 + def test_cannot_send_unprepared_requests(self, httpbin): r = requests.Request(url=httpbin()) with pytest.raises(ValueError): From 647ed5b6de6a71d235eb222fe978899c0447b0f2 Mon Sep 17 00:00:00 2001 From: Keyan Pishdadian Date: Wed, 23 Sep 2015 21:45:35 -0400 Subject: [PATCH 2/3] Add pickle test with hooks --- tests/test_requests.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/test_requests.py b/tests/test_requests.py index f665fc25..1fd6d85b 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1090,6 +1090,27 @@ class TestRequests: assert r.status_code == 200 + def test_prepared_request_with_hook_is_pickleable(self): + def print_url(r, *args, **kwargs): + print(r.url) + + r = requests.Request('POST', httpbin('post'), hooks=dict(response=print_url)) + p = r.prepare() + + # Verify we can pickle the request. + assert pickle.dumps(p) + r = pickle.dumps(p) + + # Verify we can use the pickled request. + assert pickle.loads(r) + r = pickle.loads(r) + + # Verify we can use the unpickled request. + s = requests.Session() + r = s.send(r) + + assert r.status_code == 200 + def test_cannot_send_unprepared_requests(self, httpbin): r = requests.Request(url=httpbin()) with pytest.raises(ValueError): From 340902153f49a2ed9316cbe1f44c67032dcc8376 Mon Sep 17 00:00:00 2001 From: Nate Prewitt Date: Fri, 19 Aug 2016 14:39:34 -0600 Subject: [PATCH 3/3] updating pickling tests for PreparedRequest --- tests/test_requests.py | 74 ++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 43 deletions(-) diff --git a/tests/test_requests.py b/tests/test_requests.py index 1fd6d85b..ff68de1c 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1053,63 +1053,51 @@ class TestRequests: assert r.request.url == pr.request.url assert r.request.headers == pr.request.headers - def test_prepared_request_is_pickleable(self): + def test_prepared_request_is_pickleable(self, httpbin): p = requests.Request('GET', httpbin('get')).prepare() - # Verify we can pickle the request. - assert pickle.dumps(p) - r = pickle.dumps(p) + # Verify PreparedRequest can be pickled and unpickled + r = pickle.loads(pickle.dumps(p)) + assert r.url == p.url + assert r.headers == p.headers + assert r.body == p.body - # Verify we can use the pickled request. - assert pickle.loads(r) - r = pickle.loads(r) - - # Verify we can use the unpickled request. + # Verify unpickled PreparedRequest sends properly s = requests.Session() - r = s.send(r) + resp = s.send(r) + assert resp.status_code == 200 - assert r.status_code == 200 - - def test_prepared_request_with_file_is_pickleable(self): - data = {'a': 0.0} - files = {'b': 'foo'} - r = requests.Request('POST', httpbin('post'), data=data, files=files) + def test_prepared_request_with_file_is_pickleable(self, httpbin): + files = {'file': open(__file__, 'rb')} + r = requests.Request('POST', httpbin('post'), files=files) p = r.prepare() - # Verify we can pickle the request. - assert pickle.dumps(p) - r = pickle.dumps(p) + # Verify PreparedRequest can be pickled and unpickled + r = pickle.loads(pickle.dumps(p)) + assert r.url == p.url + assert r.headers == p.headers + assert r.body == p.body - # Verify we can use the pickled request. - assert pickle.loads(r) - r = pickle.loads(r) - - # Verify we can use the unpickled request. + # Verify unpickled PreparedRequest sends properly s = requests.Session() - r = s.send(r) + resp = s.send(r) + assert resp.status_code == 200 - assert r.status_code == 200 - - def test_prepared_request_with_hook_is_pickleable(self): - def print_url(r, *args, **kwargs): - print(r.url) - - r = requests.Request('POST', httpbin('post'), hooks=dict(response=print_url)) + def test_prepared_request_with_hook_is_pickleable(self, httpbin): + r = requests.Request('GET', httpbin('get'), hooks=default_hooks()) p = r.prepare() - # Verify we can pickle the request. - assert pickle.dumps(p) - r = pickle.dumps(p) + # Verify PreparedRequest can be pickled + r = pickle.loads(pickle.dumps(p)) + assert r.url == p.url + assert r.headers == p.headers + assert r.body == p.body + assert r.hooks == p.hooks - # Verify we can use the pickled request. - assert pickle.loads(r) - r = pickle.loads(r) - - # Verify we can use the unpickled request. + # Verify unpickled PreparedRequest sends properly s = requests.Session() - r = s.send(r) - - assert r.status_code == 200 + resp = s.send(r) + assert resp.status_code == 200 def test_cannot_send_unprepared_requests(self, httpbin): r = requests.Request(url=httpbin())