# API calls inaccessible in Elasticsearch PY client

**URL:** <https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596>\
**Category:** Elasticsearch\
**Created:** [August 18, 2015, 3:06pm UTC](https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596 "2015-08-18T15:06:06Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![james\_mtl](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/james_mtl/32/32330_2.png) [@james\_mtl](https://discuss.elastic.co/u/james_mtl)\
**Post date:** [August 18, 2015, 3:06pm UTC](https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596/1 "2015-08-18T15:06:06Z")

</div>

I am trying to port my code from py-elasticsearch to the official python client.

```
from elasticsearch import Elasticsearch, RequestsHttpConnection
es_server = ["http://server:9200/"]
es_index = "index_pattern*"
es = Elasticsearch(es_server, connection_class=RequestsHttpConnection)

```

I'm trying to call get\_mapping and validate\_query and I get the following errors:

```
es.get_mapping()
AttributeError: 'Elasticsearch' object has no attribute 'get_mapping'
es.validate_query()
AttributeError: 'Elasticsearch' object has no attribute 'validate_query'

```

Am I missing something in my import statement?

---

<div class="post-metadata">

**Author:** ![magnusbaeck](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/magnusbaeck/32/44943_2.png) [@magnusbaeck](https://discuss.elastic.co/u/magnusbaeck)\
**Post date:** [August 18, 2015, 5:18pm UTC](https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596/2 "2015-08-18T17:18:24Z")

</div>

Your import statement is fine, but with elasticsearch-py the root Elasticsearch object doesn't contain that much. Most APIs are accessible through IndicesClient, ClusterClient, NodesClient, and CatClient objects. So:

```
es.indices.get_mapping()
es.indices.validate_query()
```

---

<div class="post-metadata">

**Author:** ![james\_mtl](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/james_mtl/32/32330_2.png) [@james\_mtl](https://discuss.elastic.co/u/james_mtl)\
**Post date:** [August 18, 2015, 8:12pm UTC](https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596/3 "2015-08-18T20:12:35Z")

</div>

Thanks that's super helpful.

---

<div class="post-metadata">

**Author:** ![json](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/json/32/4125_2.png) [@json](https://discuss.elastic.co/u/json)\
**Post date:** [August 18, 2015, 10:34pm UTC](https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596/4 "2015-08-18T22:34:38Z")

</div>

About the only thing you can get out of the root Elasticsearch object is info:

```auto
>>> from elasticsearch import Elasticsearch
>>> import json
>>> es = Elasticsearch()
>>> print json.dumps(es.info(), indent=2)
{
  "status": 200,
  "cluster_name": "elasticsearch",
  "version": {
    "lucene_version": "4.10.4",
    "build_hash": "929b9739cae115e73c346cb5f9a6f24ba735a743",
    "number": "1.7.0",
    "build_timestamp": "2015-07-16T14:31:07Z",
    "build_snapshot": false
  },
  "name": "peanut.local_01-07-22-PM",
  "tagline": "You Know, for Search"
}

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 5, 2017, 11:55pm UTC](https://discuss.elastic.co/t/api-calls-inaccessible-in-elasticsearch-py-client/27596/5 "2017-07-05T23:55:09Z")

</div>


