Skip to content

Commit f38fa51

Browse files
committed
When user is passing params we need to make a copy
Fixes elastic#517
1 parent 5ecfc70 commit f38fa51

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

elasticsearch/client/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ def query_params(*es_query_params):
5757
def _wrapper(func):
5858
@wraps(func)
5959
def _wrapped(*args, **kwargs):
60-
params = kwargs.pop('params', {})
60+
params = {}
61+
if 'params' in kwargs:
62+
params = kwargs.pop('params').copy()
6163
for p in es_query_params + GLOBAL_PARAMS:
6264
if p in kwargs:
6365
v = kwargs.pop(p)

test_elasticsearch/test_client/__init__.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ def test_request_timeout_is_passed_through_unescaped(self):
5454
calls = self.assert_url_called('HEAD', '/')
5555
self.assertEquals([({'request_timeout': .1}, None)], calls)
5656

57+
def test_params_is_copied_when(self):
58+
rt = object()
59+
params = dict(request_timeout=rt)
60+
self.client.ping(params=params)
61+
self.client.ping(params=params)
62+
calls = self.assert_url_called('HEAD', '/', 2)
63+
self.assertEquals(
64+
[
65+
({'request_timeout': rt}, None),
66+
({'request_timeout': rt}, None)
67+
],
68+
calls
69+
)
70+
self.assertFalse(calls[0][0] is calls[1][0])
71+
5772
def test_from_in_search(self):
5873
self.client.search(index='i', doc_type='t', from_=10)
5974
calls = self.assert_url_called('GET', '/i/t/_search')

0 commit comments

Comments
 (0)