Skip to content

Commit

Permalink
Query filter can accept the query as positional arg
Browse files Browse the repository at this point in the history
also it's json is different from fquery
  • Loading branch information
honzakral committed Apr 27, 2015
1 parent 8808a7b commit 334b5a5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
27 changes: 22 additions & 5 deletions elasticsearch_dsl/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
def F(name_or_filter, filters=None, **params):
# 'and/or', [F(), F()]
if filters is not None:
# someone passed in positional argument to F outside of and/or
if name_or_filter not in ('and', 'or'):
raise ValueError("Filter %r doesn't accept positional argument 'filters'." % name_or_filter)
params['filters'] = filters
# someone passed in positional argument to F outside of and/or or query
if name_or_filter in ('and', 'or'):
params['filters'] = filters
elif name_or_filter == 'query':
params['query'] = filters
else:
raise ValueError("Filter %r doesn't accept positional argument." % name_or_filter)

# {"term": {...}}
if isinstance(name_or_filter, dict):
Expand Down Expand Up @@ -81,14 +84,28 @@ class And(AndOrFilter, Filter):
class Or(AndOrFilter, Filter):
name = 'or'

class Query(Filter):
name = 'query'
_param_defs = {'query': {'type': 'query'}}

def __init__(self, query=None, **kwargs):
if query is not None:
kwargs['query'] = query
super(Query, self).__init__(**kwargs)

def to_dict(self):
d = super(Query, self).to_dict()
d[self.name].update(d[self.name].pop('query', {}))
return d


FILTERS = (
# relationships
('nested', {'filter': {'type': 'filter'}}),
('has_child', {'filter': {'type': 'filter'}}),
('has_parent', {'filter': {'type': 'filter'}}),

('fquery', {'query': {'type': 'query'}}),
('query', {'query': {'type': 'query'}}),

# core filters
('exists', None),
Expand Down
7 changes: 6 additions & 1 deletion test_elasticsearch_dsl/test_filter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from elasticsearch_dsl import filter
from elasticsearch_dsl import filter, Q

from pytest import raises

Expand All @@ -20,3 +20,8 @@ def test_not_doesnt_have_to_wrap_filter():
assert f.filter == filter.F('term', field='value')
assert f == filter.Not(filter.F('term', field='value'))

def test_query_can_use_positional_arg():
f = filter.F('query', Q('match_all'))

assert f.query == Q('match_all')
assert {'query': {'match_all': {}}} == f.to_dict()

0 comments on commit 334b5a5

Please sign in to comment.