From ead976e2ee4c56082dc2ce880e8fa99623bd0680 Mon Sep 17 00:00:00 2001 From: Arun Babu Neelicattu Date: Tue, 17 Nov 2015 18:00:34 +1000 Subject: [PATCH] Use requests session per request handler instance Resolves: Issue #35 --- tests/system/conftest.py | 12 ++++++------ tests/test_handlers.py | 12 ++++++------ ubersmith/api.py | 11 ++++++++--- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/tests/system/conftest.py b/tests/system/conftest.py index 016a199..11c1f0c 100644 --- a/tests/system/conftest.py +++ b/tests/system/conftest.py @@ -5,18 +5,18 @@ @pytest.fixture -def requests(monkeypatch): - requests = Mock() - monkeypatch.setattr(ubersmith.api, 'requests', requests) - return requests +def session(monkeypatch): + session = Mock() + monkeypatch.setattr(ubersmith.api.RequestHandler, 'session', session) + return session @pytest.fixture -def response(requests): +def response(session): response = Mock() response.headers = { 'content-type': 'application/json', } response.text = u"" - requests.post.return_value = response + session.post.return_value = response return response diff --git a/tests/test_handlers.py b/tests/test_handlers.py index 126f1ed..33186f0 100644 --- a/tests/test_handlers.py +++ b/tests/test_handlers.py @@ -158,17 +158,17 @@ def it_does_not_proxy_calls_to_methods_that_are_not_callable(self): def it_validates_ssl(self, response): h = RequestHandler('') - with patch('ubersmith.api.requests') as requests: - requests.post.return_value = response + with patch('ubersmith.api.RequestHandler.session') as session: + session.post.return_value = response h.process_request('uber.method_list') - assert requests.post.call_args[1]['verify'] is True + assert session.post.call_args[1]['verify'] is True def it_can_disable_ssl_validation(self, response): h = RequestHandler('', verify=False) - with patch('ubersmith.api.requests') as requests: - requests.post.return_value = response + with patch('ubersmith.api.RequestHandler.session') as session: + session.post.return_value = response h.process_request('uber.method_list') - assert requests.post.call_args[1]['verify'] is False + assert session.post.call_args[1]['verify'] is False def it_validates_bad_methods(self): h = RequestHandler('') diff --git a/ubersmith/api.py b/ubersmith/api.py index 81d627c..66bb740 100644 --- a/ubersmith/api.py +++ b/ubersmith/api.py @@ -239,6 +239,11 @@ def __init__(self, base_url, username=None, password=None, verify=True): self.username = username self.password = password self.verify = verify + self._session = requests.session() + + @property + def session(self): + return self._session def process_request(self, method, data=None): """Process request over HTTP to ubersmith instance. @@ -289,9 +294,9 @@ def _is_token_response(response): def _send_request(self, method, data): url = append_qs(self.base_url, {'method': method}) data, files, headers = self._encode_data(data) - return requests.post(url, data=data, files=files, headers=headers, - auth=(self.username, self.password), - verify=self.verify) + return self.session.post(url, data=data, files=files, headers=headers, + auth=(self.username, self.password), + verify=self.verify) @staticmethod def _validate_request_method(method):