Be more benevolent when dealing with hosts parameter
This was mostly inspired by work on haystack for backwards compatibility
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import weakref
|
import weakref
|
||||||
|
import logging
|
||||||
|
|
||||||
from ..transport import Transport
|
from ..transport import Transport
|
||||||
from ..exceptions import NotFoundError, TransportError
|
from ..exceptions import NotFoundError, TransportError
|
||||||
@@ -6,6 +7,8 @@ from .indices import IndicesClient
|
|||||||
from .cluster import ClusterClient
|
from .cluster import ClusterClient
|
||||||
from .utils import query_params, _make_path
|
from .utils import query_params, _make_path
|
||||||
|
|
||||||
|
logger = logging.getLogger('elasticsearch')
|
||||||
|
|
||||||
def _normalize_hosts(hosts):
|
def _normalize_hosts(hosts):
|
||||||
"""
|
"""
|
||||||
Helper function to transform hosts argument to
|
Helper function to transform hosts argument to
|
||||||
@@ -15,10 +18,23 @@ def _normalize_hosts(hosts):
|
|||||||
if hosts is None:
|
if hosts is None:
|
||||||
return [{}]
|
return [{}]
|
||||||
|
|
||||||
|
# passed in just one string
|
||||||
|
if isinstance(hosts, (type(''), type(u''))):
|
||||||
|
hosts = [hosts]
|
||||||
|
|
||||||
out = []
|
out = []
|
||||||
# normalize hosts to dicts
|
# normalize hosts to dicts
|
||||||
for i, host in enumerate(hosts):
|
for i, host in enumerate(hosts):
|
||||||
if isinstance(host, (type(''), type(u''))):
|
if isinstance(host, (type(''), type(u''))):
|
||||||
|
host = host.strip('/')
|
||||||
|
# remove schema information
|
||||||
|
if '://' in host:
|
||||||
|
logger.warn(
|
||||||
|
"List of nodes should not include schema information (http://): %r.",
|
||||||
|
host
|
||||||
|
)
|
||||||
|
host = host[host.index('://') + 3:]
|
||||||
|
|
||||||
h = {"host": host}
|
h = {"host": host}
|
||||||
if ':' in host:
|
if ':' in host:
|
||||||
# TODO: detect auth urls
|
# TODO: detect auth urls
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from mock import patch
|
||||||
|
|
||||||
from elasticsearch.client import _normalize_hosts
|
from elasticsearch.client import _normalize_hosts
|
||||||
|
|
||||||
from ..test_cases import TestCase, ElasticsearchTestCase
|
from ..test_cases import TestCase, ElasticsearchTestCase
|
||||||
@@ -18,6 +20,22 @@ 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}]))
|
||||||
|
|
||||||
|
@patch('elasticsearch.client.logger')
|
||||||
|
def test_schema_is_stripped_out(self, logger):
|
||||||
|
self.assertEquals(
|
||||||
|
[{"host": "elasticsearch.org", "port": 9200}],
|
||||||
|
_normalize_hosts(["http://elasticsearch.org:9200/"])
|
||||||
|
)
|
||||||
|
# schema triggers a warning
|
||||||
|
self.assertEquals(1, logger.warn.call_count)
|
||||||
|
|
||||||
|
def test_single_string_is_wrapped_in_list(self):
|
||||||
|
self.assertEquals(
|
||||||
|
[{"host": "elasticsearch.org"}],
|
||||||
|
_normalize_hosts("elasticsearch.org")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestClient(ElasticsearchTestCase):
|
class TestClient(ElasticsearchTestCase):
|
||||||
def test_from_in_search(self):
|
def test_from_in_search(self):
|
||||||
self.client.search(index='i', doc_type='t', from_=10)
|
self.client.search(index='i', doc_type='t', from_=10)
|
||||||
|
|||||||
Reference in New Issue
Block a user