diff --git a/elasticsearch/connection/http.py b/elasticsearch/connection/http.py index 4b20d4b2..d8ab2571 100644 --- a/elasticsearch/connection/http.py +++ b/elasticsearch/connection/http.py @@ -18,7 +18,7 @@ class RequestsHttpConnection(Connection): :arg use_ssl: use ssl for the connection if `True` """ def __init__(self, host='localhost', port=9200, http_auth=None, use_ssl=False, **kwargs): - super(RequestsHttpConnection, self).__init__(host=host, port=port, **kwargs) + super(RequestsHttpConnection, self).__init__(host= host, port=port, **kwargs) self.session = requests.session() if http_auth is not None: if not isinstance(http_auth, tuple): @@ -32,16 +32,18 @@ class RequestsHttpConnection(Connection): def perform_request(self, method, url, params=None, body=None, timeout=None, ignore=()): url = self.base_url + url + if params: + url = '%s?%s' % (url, urlencode(params or {})) - # use prepared requests so that requests formats url and params for us to log - request = requests.Request(method, url, params=params or {}, data=body).prepare() start = time.time() try: - response = self.session.send(request, timeout=timeout or self.timeout) + response = self.session.request(method, url, data=body, timeout=timeout or self.timeout) + # retrieve request so that we can use .path_url in logging + request = response.request duration = time.time() - start raw_data = response.text except (requests.ConnectionError, requests.Timeout) as e: - self.log_request_fail(method, request.url, time.time() - start, exception=e) + self.log_request_fail(method, url, time.time() - start, exception=e) raise ConnectionError('N/A', str(e), e) # raise errors based on http status codes, let the client handle those if needed diff --git a/test_elasticsearch/test_connection.py b/test_elasticsearch/test_connection.py index 31ec10d2..1320e070 100644 --- a/test_elasticsearch/test_connection.py +++ b/test_elasticsearch/test_connection.py @@ -45,13 +45,15 @@ class TestUrllib3Connection(TestCase): class TestRequestsConnection(TestCase): def _get_mock_connection(self, connection_params={}, status_code=200, response_body=u'{}'): con = RequestsHttpConnection(**connection_params) - - con.session.send = Mock() - - dummy_response = Mock() - con.session.send.return_value = dummy_response - dummy_response.status_code = status_code - dummy_response.text = response_body + def _dummy_send(*args, **kwargs): + dummy_response = Mock() + dummy_response.headers = {} + dummy_response.status_code = status_code + dummy_response.text = response_body + dummy_response.request = args[0] + _dummy_send.call_args = (args, kwargs) + return dummy_response + con.session.send = _dummy_send return con def _get_request(self, connection, *args, **kwargs): @@ -59,11 +61,9 @@ class TestRequestsConnection(TestCase): self.assertEquals(200, status) self.assertEquals(u'{}', data) - self.assertEquals(1, connection.session.send.call_count) - timeout = kwargs.pop('timeout', connection.timeout) args, kwargs = connection.session.send.call_args - self.assertEquals({'timeout': timeout}, kwargs) + self.assertEquals(timeout, kwargs['timeout']) self.assertEquals(1, len(args)) return args[0]