Skip to content

Commit

Permalink
Add raw_query_parameters method to QuerySet
Browse files Browse the repository at this point in the history
  • Loading branch information
rlskoeser committed Mar 29, 2019
1 parent 1de9194 commit e0a7f04
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
14 changes: 14 additions & 0 deletions parasolr/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class SolrQuerySet:
field_list = []
highlight_field = None
highlight_opts = {}
raw_params = {}

#: by default, combine search queries with AND
default_search_operator = 'AND'
Expand Down Expand Up @@ -79,6 +80,7 @@ def query_opts(self) -> Dict[str, str]:
query_opts = {
'start': self.start,
}

if self.filter_qs:
query_opts['fq'] = self.filter_qs
if self.stop:
Expand All @@ -103,6 +105,9 @@ def query_opts(self) -> Dict[str, str]:
for key, val in self.highlight_opts.items():
query_opts['hl.%s' % key] = val

# include any raw query parameters
query_opts.update(self.raw_params)

return query_opts

def count(self) -> int:
Expand Down Expand Up @@ -219,6 +224,14 @@ def highlight(self, field: str, **kwargs):
qs_copy.highlight_opts = kwargs
return qs_copy

def raw_query_parameters(self, **kwargs):
"""Add abritrary raw parameters to be included in the query
request, e.g. for variables referenced in join or field queries.
Analogous to the input of the same name in the Solr web interface."""
qs_copy = self._clone()
qs_copy.raw_params.update(kwargs)
return qs_copy

def get_highlighting(self):
"""Return the highlighting portion of the Solr response."""
if not self._result_cache:
Expand Down Expand Up @@ -255,6 +268,7 @@ def _clone(self):
qs_copy.sort_options = list(self.sort_options)
qs_copy.field_list = list(self.field_list)
qs_copy.highlight_opts = dict(self.highlight_opts)
qs_copy.raw_params = dict(self.raw_params)

return qs_copy

Expand Down
16 changes: 16 additions & 0 deletions parasolr/tests/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,22 @@ def test_highlight(self):
assert sqs.highlight_field is None
assert sqs.highlight_opts == {}

def test_raw_query_parameters(self):
mocksolr = Mock(spec=SolrClient)
sqs = SolrQuerySet(mocksolr)
raw_q = {'extra_query': 'foobar'}
raw_sqs = sqs.raw_query_parameters(**raw_q)
# raw query stored
assert raw_sqs.raw_params == raw_q
# included in query opts
assert raw_q['extra_query'] in raw_sqs.query_opts()['extra_query']
# original unchanged
assert sqs.raw_params == {}

# additional raw params add rather than replace
rawer_sqs = raw_sqs.raw_query_parameters(another='two')
assert len(rawer_sqs.raw_params) == 2

def test_get_highlighting(self):
mocksolr = Mock(spec=SolrClient)
sqs = SolrQuerySet(mocksolr)
Expand Down

0 comments on commit e0a7f04

Please sign in to comment.