Make offset in search work. from is a reserved word in python so use from_

Fixes #13
Thanks llonchj,  danfairs, vanatteveldt and RonRothman!
This commit is contained in:
Honza Kral
2013-10-17 22:01:25 +02:00
parent 798778ee0a
commit 2bb16fe7ed
3 changed files with 18 additions and 3 deletions
+5
View File
@@ -11,6 +11,11 @@ API Documentation
we, however, recommend that people use keyword arguments for all calls for we, however, recommend that people use keyword arguments for all calls for
consistency and safety. consistency and safety.
.. note::
for compatibility with the Python ecosystem we use ``from_`` instead of
``from`` and ``doc_type`` instead of ``type`` as parameter names.
.. py:module:: elasticsearch .. py:module:: elasticsearch
Elasticsearch Elasticsearch
+6 -2
View File
@@ -294,7 +294,7 @@ class Elasticsearch(object):
@query_params('_source', '_source_exclude', '_source_include', @query_params('_source', '_source_exclude', '_source_include',
'analyze_wildcard', 'analyzer', 'default_operator', 'df', 'analyze_wildcard', 'analyzer', 'default_operator', 'df',
'explain', 'fields', 'ignore_indices', 'indices_boost', 'lenient', 'explain', 'fields', 'ignore_indices', 'indices_boost', 'lenient',
'lowercase_expanded_terms', 'offset', 'preference', 'q', 'routing', 'lowercase_expanded_terms', 'from_', 'preference', 'q', 'routing',
'scroll', 'search_type', 'size', 'sort', 'source', 'stats', 'scroll', 'search_type', 'size', 'sort', 'source', 'stats',
'suggest_field', 'suggest_mode', 'suggest_size', 'suggest_text', 'timeout', 'suggest_field', 'suggest_mode', 'suggest_size', 'suggest_text', 'timeout',
'version') 'version')
@@ -330,7 +330,7 @@ class Elasticsearch(object):
:arg lenient: Specify whether format-based query failures (such as :arg lenient: Specify whether format-based query failures (such as
providing text to a numeric field) should be ignored providing text to a numeric field) should be ignored
:arg lowercase_expanded_terms: Specify whether query terms should be lowercased :arg lowercase_expanded_terms: Specify whether query terms should be lowercased
:arg offset: Starting offset (default: 0) :arg from_: Starting offset (default: 0)
:arg preference: Specify the node or shard the operation should be :arg preference: Specify the node or shard the operation should be
performed on (default: random) performed on (default: random)
:arg q: Query in the Lucene query string syntax :arg q: Query in the Lucene query string syntax
@@ -350,6 +350,10 @@ class Elasticsearch(object):
:arg timeout: Explicit operation timeout :arg timeout: Explicit operation timeout
:arg version: Specify whether to return document version as part of a hit :arg version: Specify whether to return document version as part of a hit
""" """
# from is a reserved word so it cannot be used, use from_ instead
if 'from_' in params:
params['from'] = params.pop('from_')
if doc_type and not index: if doc_type and not index:
index = '_all' index = '_all'
_, data = self.transport.perform_request('GET', _make_path(index, doc_type, '_search'), _, data = self.transport.perform_request('GET', _make_path(index, doc_type, '_search'),
+7 -1
View File
@@ -1,6 +1,6 @@
from elasticsearch.client import _normalize_hosts from elasticsearch.client import _normalize_hosts
from ..test_cases import TestCase from ..test_cases import TestCase, ElasticsearchTestCase
class TestNormalizeHosts(TestCase): class TestNormalizeHosts(TestCase):
def test_none_uses_defaults(self): def test_none_uses_defaults(self):
@@ -17,3 +17,9 @@ class TestNormalizeHosts(TestCase):
def test_dicts_are_left_unchanged(self): def test_dicts_are_left_unchanged(self):
self.assertEquals([{"host": "local", "extra": 123}], _normalize_hosts([{"host": "local", "extra": 123}])) self.assertEquals([{"host": "local", "extra": 123}], _normalize_hosts([{"host": "local", "extra": 123}]))
class TestClient(ElasticsearchTestCase):
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')
self.assertEquals([({'from': '10'}, None)], calls)