From 953c66e6507b3f5a107126fa0106609b64724575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Honza=20Kr=C3=A1l?= Date: Tue, 30 Dec 2014 18:50:52 +0100 Subject: [PATCH] fix Elasticsearch.index with id=0 Fixes #164 Thanks larsmans! --- elasticsearch/client/__init__.py | 3 ++- test_elasticsearch/test_client/__init__.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/elasticsearch/client/__init__.py b/elasticsearch/client/__init__.py index 3b09c8a6..03d48549 100644 --- a/elasticsearch/client/__init__.py +++ b/elasticsearch/client/__init__.py @@ -252,7 +252,8 @@ class Elasticsearch(object): for param in (index, doc_type, body): if param in SKIP_IN_PATH: raise ValueError("Empty value passed for a required argument.") - _, data = self.transport.perform_request('PUT' if id else 'POST', + method = 'POST' if id in SKIP_IN_PATH else 'PUT' + _, data = self.transport.perform_request(method, _make_path(index, doc_type, id), params=params, body=body) return data diff --git a/test_elasticsearch/test_client/__init__.py b/test_elasticsearch/test_client/__init__.py index 229a883c..71bd04d0 100644 --- a/test_elasticsearch/test_client/__init__.py +++ b/test_elasticsearch/test_client/__init__.py @@ -68,3 +68,13 @@ class TestClient(ElasticsearchTestCase): def test_repr_truncates_host_to_10(self): hosts = [{"host": "es" + str(i)} for i in range(20)] self.assertNotIn("es5", repr(Elasticsearch(hosts))) + + def test_index_uses_post_if_id_is_empty(self): + self.client.index(index='my-index', doc_type='test-doc', id='', body={}) + + self.assert_url_called('POST', '/my-index/test-doc') + + def test_index_uses_put_if_id_is_not_empty(self): + self.client.index(index='my-index', doc_type='test-doc', id=0, body={}) + + self.assert_url_called('PUT', '/my-index/test-doc/0')