Enable url_prefix for Connection, do not include it in trace calls

This commit is contained in:
Honza Kral
2013-05-23 22:15:55 +02:00
parent c23aacf1f9
commit a70db43abd
2 changed files with 23 additions and 2 deletions
+7 -2
View File
@@ -12,8 +12,11 @@ tracer.propagate = False
class Connection(object):
transport_schema = 'http'
def __init__(self, host='localhost', port=9200, **kwargs):
def __init__(self, host='localhost', port=9200, url_prefix='', **kwargs):
self.host = '%s://%s:%s' % (self.transport_schema, host, port)
if url_prefix:
url_prefix = '/' + url_prefix.strip('/')
self.url_prefix = url_prefix
def __repr__(self):
return '<%s: %s>' % (self.__class__.__name__, self.host)
@@ -34,6 +37,8 @@ class Connection(object):
if tracer.isEnabledFor(logging.INFO):
# include pretty in trace curls
path = path.replace('?', '?pretty&', 1) if '?' in path else path + '?pretty'
if self.url_prefix:
path = path.replace(self.url_prefix, '', 1)
tracer.info("curl -X%s 'http://localhost:9200%s' -d '%s'", method, path, _pretty_json(body) if body else '')
if tracer.isEnabledFor(logging.DEBUG):
@@ -52,7 +57,7 @@ class RequestsHttpConnection(Connection):
self.session = requests.session()
def perform_request(self, method, url, params=None, body=None):
url = self.host + url
url = self.host + self.url_prefix + url
# use prepared requests so that requests formats url and params for us to log
request = requests.Request(method, url, params=params or {}, data=body).prepare()
+16
View File
@@ -111,3 +111,19 @@ class TestRequestsConnection(TestCase):
self.assertEquals('http://localhost:9200/', request.url)
self.assertEquals('GET', request.method)
self.assertEquals('{"answer": 42}', request.body)
@patch('elasticsearch.connection.tracer')
def test_url_prefix(self, tracer):
con = self._get_mock_connection({"url_prefix": "/some-prefix/"})
request = self._get_request(con, 'GET', '/_search', body='{"answer": 42}')
self.assertEquals('http://localhost:9200/some-prefix/_search', request.url)
self.assertEquals('GET', request.method)
self.assertEquals('{"answer": 42}', request.body)
# trace request
self.assertEquals(1, tracer.info.call_count)
self.assertEquals(
"curl -XGET 'http://localhost:9200/_search?pretty' -d '{\n \"answer\": 42\n}'",
tracer.info.call_args[0][0] % tracer.info.call_args[0][1:]
)