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:
Honza Kral
2013-10-02 00:39:19 +02:00
parent 4f890ff89c
commit b0587071b6
2 changed files with 17 additions and 15 deletions
+7 -5
View File
@@ -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
+10 -10
View File
@@ -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]