Circumvent prepared requests from RequestsHttpConnection
this is because sesion.send(prepared_request) doesn't pass through auth info. Thanks nkvoll! Fixes #8
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user