When user is passing params we need to make a copy

Fixes #517
This commit is contained in:
Honza Král
2017-01-17 03:10:18 +01:00
parent 5ecfc70a16
commit f38fa51fea
2 changed files with 18 additions and 1 deletions
+3 -1
View File
@@ -57,7 +57,9 @@ def query_params(*es_query_params):
def _wrapper(func):
@wraps(func)
def _wrapped(*args, **kwargs):
params = kwargs.pop('params', {})
params = {}
if 'params' in kwargs:
params = kwargs.pop('params').copy()
for p in es_query_params + GLOBAL_PARAMS:
if p in kwargs:
v = kwargs.pop(p)
@@ -54,6 +54,21 @@ class TestClient(ElasticsearchTestCase):
calls = self.assert_url_called('HEAD', '/')
self.assertEquals([({'request_timeout': .1}, None)], calls)
def test_params_is_copied_when(self):
rt = object()
params = dict(request_timeout=rt)
self.client.ping(params=params)
self.client.ping(params=params)
calls = self.assert_url_called('HEAD', '/', 2)
self.assertEquals(
[
({'request_timeout': rt}, None),
({'request_timeout': rt}, None)
],
calls
)
self.assertFalse(calls[0][0] is calls[1][0])
def test_from_in_search(self):
self.client.search(index='i', doc_type='t', from_=10)
calls = self.assert_url_called('GET', '/i/t/_search')