From 192ccdecc7e7a7ab67d7983fd1e0552883d4546d Mon Sep 17 00:00:00 2001 From: Mathieu Leplatre Date: Tue, 13 Jun 2017 13:03:28 +0200 Subject: [PATCH] Fix crash on search parse exceptions (fixes #44) --- CHANGELOG.rst | 2 ++ kinto_elasticsearch/views.py | 8 ++++++-- tests/test_elasticsearch.py | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4ee0f89..16473d1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ Changelog **Bug fixes** - Limit the number of results returned by default (fixes #45) +- Fix crash on search parse exceptions (fixes #44) + 0.1.0 (2017-05-26) ------------------ diff --git a/kinto_elasticsearch/views.py b/kinto_elasticsearch/views.py index 46b1a45..a0b845e 100644 --- a/kinto_elasticsearch/views.py +++ b/kinto_elasticsearch/views.py @@ -48,8 +48,12 @@ def search_view(request, **kwargs): except elasticsearch.RequestError as e: # Malformed query. - message = e.info["error"]["reason"] - details = e.info["error"]["root_cause"][0] + if isinstance(e.info["error"], dict): + message = e.info["error"]["reason"] + details = e.info["error"]["root_cause"][0] + else: + message = e.info["error"] + details = None response = http_error(httpexceptions.HTTPBadRequest(), errno=ERRORS.INVALID_PARAMETERS, message=message, diff --git a/tests/test_elasticsearch.py b/tests/test_elasticsearch.py index 66df390..c9a2830 100644 --- a/tests/test_elasticsearch.py +++ b/tests/test_elasticsearch.py @@ -384,3 +384,11 @@ def test_can_aggregate_values(self): {"key": "abc", "doc_count": 1}, {"key": "efg", "doc_count": 1}, ] + + def test_search_parse_exception_returns_400(self): + e = elasticsearch.RequestError('', '', + {"error": "Could not find aggregator type"}) + with mock.patch("kinto_elasticsearch.indexer.Indexer.search", + side_effect=e): + self.app.post_json("/buckets/bid/collections/cid/search", + headers=self.headers, status=400)