def test_queries_multiple_uris(self, storage): """ Uses a `terms` filter against target.scope to filter for URI. When multiple "uri" fields are supplied, the normalized URIs of all of them should be collected into a set and sent in the query. """ request = mock.Mock() params = multidict.MultiDict() params.add("uri", "http://example.com") params.add("uri", "http://example.net") storage.expand_uri.side_effect = [ ["http://giraffes.com/", "https://elephants.com/"], ["http://tigers.com/", "https://elephants.com/"], ] urifilter = query.UriFilter(request) result = urifilter(params) query_uris = result["terms"]["target.scope"] storage.expand_uri.assert_any_call(request.db, "http://example.com") storage.expand_uri.assert_any_call(request.db, "http://example.net") assert sorted(query_uris) == sorted([ "httpx://giraffes.com", "httpx://elephants.com", "httpx://tigers.com" ])
def test_expands_and_normalizes_into_terms_filter(self, storage): """ Uses a `terms` filter against target.scope to filter for URI. UriFilter should use a `terms` filter against the normalized version of the target source field, which we store in `target.scope`. It should expand the input URI before searching, and normalize the results of the expansion. """ request = mock.Mock() storage.expand_uri.side_effect = lambda _, x: [ "http://giraffes.com/", "https://elephants.com/", ] urifilter = query.UriFilter(request) result = urifilter({"uri": "http://example.com/"}) query_uris = result["terms"]["target.scope"] storage.expand_uri.assert_called_with(request.db, "http://example.com/") assert sorted(query_uris) == sorted( ["httpx://giraffes.com", "httpx://elephants.com"])
def test_inactive_when_no_uri_param(self): """ When there's no `uri` parameter, return None. """ request = mock.Mock() urifilter = query.UriFilter(request) assert urifilter({"foo": "bar"}) is None
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
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
def test_accepts_url_aliases(self, storage): request = mock.Mock() params = multidict.MultiDict() params.add("uri", "http://example.com") params.add("url", "http://example.net") storage.expand_uri.side_effect = [ ["http://giraffes.com/", "https://elephants.com/"], ["http://tigers.com/", "https://elephants.com/"], ] urifilter = query.UriFilter(request) result = urifilter(params) query_uris = result["terms"]["target.scope"] storage.expand_uri.assert_any_call(request.db, "http://example.com") storage.expand_uri.assert_any_call(request.db, "http://example.net") assert sorted(query_uris) == sorted(["httpx://giraffes.com", "httpx://elephants.com", "httpx://tigers.com"])
def search(self, search, pyramid_request): search.append_filter(query.UriFilter(pyramid_request)) return search