Пример #1
0
    def test_offset(self, offset, from_):
        builder = query.Builder(ES_VERSION)

        if offset is MISSING:
            q = builder.build({})
        else:
            q = builder.build({"offset": offset})

        assert q["from"] == from_
Пример #2
0
    def test_sort_is_by_updated(self):
        """Sort defaults to "updated"."""
        builder = query.Builder(ES_VERSION)

        q = builder.build({})

        sort = q["sort"]
        assert len(sort) == 1
        assert list(sort[0].keys()) == ["updated"]
Пример #3
0
    def test_ignores_filters_returning_none(self):
        testfilter = mock.Mock()
        testfilter.return_value = None
        builder = query.Builder(ES_VERSION)
        builder.append_filter(testfilter)

        q = builder.build({})

        assert q["query"] == {"match_all": {}}
Пример #4
0
    def test_with_evil_arguments(self):
        builder = query.Builder(ES_VERSION)
        params = {"offset": "3foo", "limit": '\' drop table annotations'}

        q = builder.build(params)

        assert q["from"] == 0
        assert q["size"] == 20
        assert q["query"] == {'match_all': {}}
Пример #5
0
    def test_default_param_action(self):
        """Other params are added as "match" clauses."""
        builder = query.Builder(ES_VERSION)

        q = builder.build({"foo": "bar"})

        assert q["query"] == {
            'bool': {'filter': [],
                     'must': [{'match': {'foo': 'bar'}}]},
        }
Пример #6
0
    def test_adds_aggregations_to_query(self):
        testaggregation = mock.Mock(key="foobar")
        # testaggregation.key.return_value = "foobar"
        testaggregation.return_value = {"terms": {"field": "foo"}}
        builder = query.Builder()
        builder.append_aggregation(testaggregation)

        q = builder.build({})

        assert q["aggs"] == {"foobar": {"terms": {"field": "foo"}}}
Пример #7
0
    def test_filters_query_by_filter_results(self):
        testfilter = mock.Mock()
        testfilter.return_value = {"term": {"giraffe": "nose"}}
        builder = query.Builder(ES_VERSION)
        builder.append_filter(testfilter)

        q = builder.build({})
        assert q["query"] == {
            'bool': {'filter': [{'term': {'giraffe': 'nose'}}],
                     'must': []},
        }
Пример #8
0
    def test_adds_matchers_to_query(self):
        testmatcher = mock.Mock()
        testmatcher.return_value = {"match": {"giraffe": "nose"}}
        builder = query.Builder()
        builder.append_matcher(testmatcher)

        q = builder.build({})

        assert q["query"] == {
            "bool": {"must": [{"match": {"giraffe": "nose"}}]},
        }
Пример #9
0
    def test_adds_matchers_to_query(self):
        testmatcher = mock.Mock()
        testmatcher.return_value = {"match": {"giraffe": "nose"}}
        builder = query.Builder(ES_VERSION)
        builder.append_matcher(testmatcher)

        q = builder.build({})

        assert q["query"] == {
            'bool': {'filter': [],
                     'must': [{'match': {'giraffe': 'nose'}}]},
        }
Пример #10
0
def default_querybuilder(request):
    builder = query.Builder()
    builder.append_filter(query.DeletedFilter())
    builder.append_filter(query.AuthFilter(request))
    builder.append_filter(query.UriFilter(request))
    builder.append_filter(query.GroupFilter())
    builder.append_filter(query.UserFilter())
    builder.append_matcher(query.AnyMatcher())
    builder.append_matcher(query.TagsMatcher())
    for factory in request.registry.get(FILTERS_KEY, []):
        builder.append_filter(factory(request))
    return builder
Пример #11
0
    def test_with_custom_sort(self):
        """Custom sorts are returned in the query dict."""
        builder = query.Builder(ES_VERSION)

        q = builder.build({"sort": "title"})

        assert q["sort"] == [{
            'title': {
                'unmapped_type': 'boolean',
                'order': 'desc'
            }
        }]
Пример #12
0
 def _default_querybuilder(request, es):
     builder = query.Builder(es_version=es.version)
     builder.append_filter(query.DeletedFilter())
     builder.append_filter(query.AuthFilter(request))
     builder.append_filter(query.UriFilter(request))
     builder.append_filter(query.GroupFilter())
     builder.append_filter(query.GroupAuthFilter(request))
     builder.append_filter(query.UserFilter())
     builder.append_filter(query.NipsaFilter(request))
     builder.append_matcher(query.AnyMatcher())
     builder.append_matcher(query.TagsMatcher())
     return builder
Пример #13
0
    def test_with_custom_sort(self):
        """Custom sorts are returned in the query dict."""
        builder = query.Builder()

        q = builder.build({"sort": "title"})

        assert q["sort"] == [{
            'title': {
                'ignore_unmapped': True,
                'order': 'desc'
            }
        }]
Пример #14
0
    def test_default_params_multidict(self):
        """Multiple params go into multiple "match" dicts."""
        builder = query.Builder(ES_VERSION)
        params = multidict.MultiDict()
        params.add("user", "fred")
        params.add("user", "bob")

        q = builder.build(params)

        assert q["query"] == {
            'bool': {'filter': [],
                     'must': [{'match': {'user': '******'}},
                              {'match': {'user': '******'}}]},
        }
Пример #15
0
    def test_filters_query_by_filter_results(self):
        testfilter = mock.Mock()
        testfilter.return_value = {"term": {"giraffe": "nose"}}
        builder = query.Builder()
        builder.append_filter(testfilter)

        q = builder.build({})

        assert q["query"] == {
            "filtered": {
                "filter": {"and": [{"term": {"giraffe": "nose"}}]},
                "query": {"match_all": {}},
            },
        }
Пример #16
0
    def test_default_params_multidict(self):
        """Multiple params go into multiple "match" dicts."""
        builder = query.Builder()
        params = multidict.MultiDict()
        params.add("user", "fred")
        params.add("user", "bob")

        q = builder.build(params)

        assert q["query"] == {
            "bool": {
                "must": [
                    {"match": {"user": "******"}},
                    {"match": {"user": "******"}}
                ]
            }
        }
Пример #17
0
 def clear(self):
     """Clear search filters, aggregators, and matchers."""
     self.builder = query.Builder(es_version=self.es.version)
     self.reply_builder = query.Builder(es_version=self.es.version)
Пример #18
0
    def test_limit_missing(self):
        builder = query.Builder(ES_VERSION)

        q = builder.build({})

        assert q["size"] == LIMIT_DEFAULT