diff --git a/elasticsearch/client.py b/elasticsearch/client.py index 18123dd8..864a4aab 100644 --- a/elasticsearch/client.py +++ b/elasticsearch/client.py @@ -175,6 +175,45 @@ class InidicesClient(NamespacedClient): return False return True + @query_params('ignore_conflicts', 'timeout') + def put_mapping(self, index, body, doc_type=None, params=None): + """ + The put mapping API allows to register specific mapping definition for a specific type. + http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/ + + :arg index: A comma-separated list of index names; use `_all` to perform the operation on all indices + :arg doc_type: The name of the document type + :arg body: The mapping definition + :arg ignore_conflicts: Specify whether to ignore conflicts while updating the mapping (default: false) + :arg timeout: Explicit operation timeout + """ + status, data = self.transport.perform_request('PUT', _make_path(index, doc_type, '_mapping'), params=params, body=body) + return data + + @query_params() + def get_mapping(self, index=None, doc_type=None, params=None): + """ + The get mapping API allows to retrieve mapping definition of index or index/type. + http://www.elasticsearch.org/guide/reference/api/admin-indices-get-mapping/ + + :arg index: A comma-separated list of index names; use `_all` or empty string for all indices + :arg doc_type: A comma-separated list of document types + """ + status, data = self.transport.perform_request('GET', _make_path(index, doc_type, '_mapping'), params=params) + return data + + @query_params() + def delete_mapping(self, index, doc_type, params=None): + """ + Allow to delete a mapping (type) along with its data. + http://www.elasticsearch.org/guide/reference/api/admin-indices-delete-mapping/ + + :arg index: A comma-separated list of index names; use `_all` for all indices + :arg doc_type: The name of the document type to delete + """ + status, data = self.transport.perform_request('DELETE', _make_path(index, doc_type, '_mapping'), params=params) + return data + class Elasticsearch(object): """ diff --git a/test_elasticsearch/test_server/test_common.py b/test_elasticsearch/test_server/test_common.py index ba88527b..b45269e1 100644 --- a/test_elasticsearch/test_server/test_common.py +++ b/test_elasticsearch/test_server/test_common.py @@ -10,6 +10,13 @@ from unittest import TestCase, SkipTest from elasticsearch import Elasticsearch +# some params had to be changed in python, keep track of them so we can rename +# those in the tests accordingly +PARAMS_RENAMES = { + 'type': 'doc_type', + 'from': 'offset', +} + class InvalidActionType(SkipTest): pass @@ -39,6 +46,12 @@ class YamlTestCase(TestCase): self.assertTrue(hasattr(api, m)) api = getattr(api, m) + # some parameters had to be renamed to not clash with python builtins, + # compensate + for k in PARAMS_RENAMES: + if k in args: + args[PARAMS_RENAMES[k]] = args.pop(k) + self.last_response = api(**args) def run_length(self, action): diff --git a/test_elasticsearch/test_server/yaml/20_mapping.yaml b/test_elasticsearch/test_server/yaml/20_mapping.yaml new file mode 100644 index 00000000..6d3c22de --- /dev/null +++ b/test_elasticsearch/test_server/yaml/20_mapping.yaml @@ -0,0 +1,31 @@ +--- +"Mapping setup": + - do: + indices.create: + index: test + - do: + indices.put_mapping: + index: test + type: test-type + body: + test-type: + properties: + text: + type: string +--- +"Test get mapping retrieves existing mapping": + - do: + indices.get_mapping: + index: test + type: test-type + - is: { test-type.properties.text.type: string } +--- +"Test delete mapping removes mapping": + - do: + indices.delete_mapping: + index: test + type: test-type + - do: + indices.get_mapping: + index: test + - length: { test: 0 }