Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions annotator/annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,18 @@ def save(self, *args, **kwargs):
super(Annotation, self).save(*args, **kwargs)

@classmethod
def search_raw(cls, query=None, user=None, authorization_enabled=None,
**kwargs):
def search_raw(cls, query=None, params=None, raw_result=False,
user=None, authorization_enabled=None):
"""Perform a raw Elasticsearch query

Any ElasticsearchExceptions are to be caught by the caller.

Keyword arguments:
query -- Query to send to Elasticsearch
params -- Extra keyword arguments to pass to Elasticsearch.search
raw_result -- Return Elasticsearch's response as is
user -- The user to filter the results for according to permissions
authorization_enabled -- Overrides Annotation.es.authorization_enabled
raw_result -- Return Elasticsearch's response as is
Extra keyword arguments are passed to Elasticsearch.search
"""
if query is None:
query = {}
Expand All @@ -97,7 +97,8 @@ def search_raw(cls, query=None, user=None, authorization_enabled=None,
# Use the filtered query instead of the original
query['query'] = filtered_query

res = super(Annotation, cls).search_raw(query=query, **kwargs)
res = super(Annotation, cls).search_raw(query=query, params=params,
raw_result=raw_result)
return res

@classmethod
Expand Down
11 changes: 7 additions & 4 deletions annotator/elasticsearch.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,22 +151,24 @@ def search(cls, query=None, offset=0, limit=RESULTS_DEFAULT_SIZE, **kwargs):
return cls.search_raw(q, **kwargs)

@classmethod
def search_raw(cls, query=None, raw_result=False, **kwargs):
def search_raw(cls, query=None, params=None, raw_result=False):
"""Perform a raw Elasticsearch query

Any ElasticsearchExceptions are to be caught by the caller.

Keyword arguments:
query -- Query to send to Elasticsearch
params -- Extra keyword arguments to pass to Elasticsearch.search
raw_result -- Return Elasticsearch's response as is
Extra keyword arguments are passed to Elasticsearch.search
"""
if query is None:
query = {}
if params is None:
params = {}
res = cls.es.conn.search(index=cls.es.index,
doc_type=cls.__type__,
body=query,
**kwargs)
**params)
if not raw_result:
docs = res['hits']['hits']
res = [cls(d['_source'], id=d['_id']) for d in docs]
Expand All @@ -175,7 +177,8 @@ def search_raw(cls, query=None, raw_result=False, **kwargs):
@classmethod
def count(cls, **kwargs):
"""Like search, but only count the number of matches."""
kwargs['search_type'] = 'count'
kwargs.setdefault('params', {})
kwargs['params'].update({'search_type':'count'})
res = cls.search(raw_result=True, **kwargs)
return res['hits']['total']

Expand Down
9 changes: 6 additions & 3 deletions annotator/store.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,16 +292,19 @@ def search_annotations():
def search_annotations_raw():

try:
query, kwargs = _build_query_raw(request)
query, params = _build_query_raw(request)
except ValueError:
return jsonify('Could not parse request payload!',
status=400)

if current_app.config.get('AUTHZ_ON'):
kwargs['user'] = g.user
user = g.user
else:
user = None

try:
res = g.annotation_class.search_raw(query, raw_result=True, **kwargs)
res = g.annotation_class.search_raw(query, params, raw_result=True,
user=user)
except TransportError as err:
if err.status_code is not 'N/A':
status_code = err.status_code
Expand Down