def cap_facets_factory(search, index): """Add a cap facets to query. :param search: Basic search object. :param index: Index name. :returns: A tuple containing the new search object and a dictionary with all fields and values used. """ urlkwargs = MultiDict() facets = current_app.config['RECORDS_REST_FACETS'].get(index) if facets is not None: # Aggregations. search = _aggregations(search, facets.get("aggs", {}), urlkwargs, facets.get("post_filters", {})) # Query filter search, urlkwargs = _query_filter(search, urlkwargs, facets.get("filters", {})) # Post filter search, urlkwargs = _post_filter(search, urlkwargs, facets.get("post_filters", {})) return (search, urlkwargs)
def cernopendata_facets_factory(search, index): """Add a cernopendata facets to query. :param search: Basic search object. :param index: Index name. :returns: A tuple containing the new search object and a dictionary with all fields and values used. """ urlkwargs = MultiDict() facets = current_app.config['RECORDS_REST_FACETS'].get(index) if facets is not None: # Aggregations. search = _aggregations(search, facets.get("aggs", {}), urlkwargs, facets.get("post_filters", {})) # Query filter search, urlkwargs = _query_filter( search, urlkwargs, facets.get("filters", {})) # Post filter search, urlkwargs = _post_filter( search, urlkwargs, facets.get("post_filters", {})) return (search, urlkwargs)
def test_search_is_selective_about_post_filter(self, app, config): post_filters = config['RECORDS_REST_FACETS']['records']['post_filters'] assert 'file_type' in post_filters with app.test_request_context('?file_type=png'): search = RecordsSearch().query() search, args = _post_filter(search, MultiDict(), post_filters) search_dict = search.to_dict() assert 'post_filter' in search_dict with app.test_request_context('?not_a_post_filter=png'): search = RecordsSearch().query() search, args = _post_filter(search, MultiDict(), post_filters) search_dict = search.to_dict() assert 'post_filter' not in search_dict
def test_post_filter(app, user_factory): """Test post filter.""" urlargs = MultiDict() defs = dict( type=terms_filter('type'), subtype=terms_filter('subtype'), ) with app.test_request_context("?type=test"): q = Query("value") query, args = _post_filter(q, urlargs, defs) assert 'post_filter' in query.body assert query.body['post_filter'] == dict( bool=dict(filter=[dict(terms=dict(type=['test']))]), ) assert args['type'] == 'test' with app.test_request_context("?anotertype=test"): q = Query("value") query, args = _post_filter(q, urlargs, defs) assert 'post_filter' not in query.body
def test_post_filter(app): """Test post filter.""" urlargs = MultiDict() defs = dict( type=terms_filter('type'), subtype=terms_filter('subtype'), ) with app.test_request_context('?type=test'): search = Search().query(Q(query='value')) search, args = _post_filter(search, urlargs, defs) assert 'post_filter' in search.to_dict() assert search.to_dict()['post_filter'] == dict(terms=dict( type=['test'])) assert args['type'] == 'test' with app.test_request_context('?anotertype=test'): search = Search().query(Q(query='value')) search, args = _post_filter(search, urlargs, defs) assert 'post_filter' not in search.to_dict()
def test_post_filter(app): """Test post filter.""" urlargs = MultiDict() defs = dict( type=terms_filter('type'), subtype=terms_filter('subtype'), ) with app.test_request_context('?type=test'): search = Search().query(Q(query='value')) search, args = _post_filter(search, urlargs, defs) assert 'post_filter' in search.to_dict() assert search.to_dict()['post_filter'] == dict( terms=dict(type=['test']) ) assert args['type'] == 'test' with app.test_request_context('?anotertype=test'): search = Search().query(Q(query='value')) search, args = _post_filter(search, urlargs, defs) assert 'post_filter' not in search.to_dict()
def inspire_filter_factory(search, index): urlkwargs = MultiDict() facets = get_facet_configuration(index) if facets is not None: search, urlkwargs = _query_filter(search, urlkwargs, facets.get("filters", {})) search, urlkwargs = _post_filter( search, urlkwargs, facets.get("post_filters", {}) ) return (search, urlkwargs)
def default_inspire_facets_factory(search, index): urlkwargs = MultiDict() facets = get_facet_configuration(index) if facets: search = _aggregations(search, facets.get("aggs", {})) search, urlkwargs = _query_filter(search, urlkwargs, facets.get("filters", {})) search, urlkwargs = _post_filter(search, urlkwargs, facets.get("post_filters", {})) return search, urlkwargs
def default_inspire_facets_factory(search, index): urlkwargs = MultiDict() facets = get_facet_configuration(index) if facets: search = _aggregations(search, facets.get("aggs", {})) search, urlkwargs = _query_filter( search, urlkwargs, facets.get("filters", {})) search, urlkwargs = _post_filter( search, urlkwargs, facets.get("post_filters", {})) return search, urlkwargs
def test_post_filter(app, user_factory): """Test post filter.""" urlargs = MultiDict() defs = dict( type=terms_filter('type'), subtype=terms_filter('subtype'), ) with app.test_request_context("?type=test"): q = Query("value") query, args = _post_filter(q, urlargs, defs) assert 'post_filter' in query.body assert query.body['post_filter'] == dict( bool=dict( filter=[dict(terms=dict(type=['test']))] ), ) assert args['type'] == 'test' with app.test_request_context("?anotertype=test"): q = Query("value") query, args = _post_filter(q, urlargs, defs) assert 'post_filter' not in query.body
def deposit_facets_factory(search, index): """Replace default search factory to use custom facet generator.""" urlkwargs = MultiDict() facets = current_app.config['RECORDS_REST_FACETS'].get(index) if facets is not None: # Aggregations. search = _aggregations(search, facets.get("aggs", {})) # Query filter search, urlkwargs = _query_filter(search, urlkwargs, facets.get("filters", {})) # Post filter search, urlkwargs = _post_filter(search, urlkwargs, facets.get("post_filters", {})) return (search, urlkwargs)
def inspire_filter_factory(search, urlkwargs, search_index): """Copies behaviour of default facets factory but without the aggregations, As facets factory is also responsible for filtering the year and author (invenio mess) Args: search: Elastic search DSL search instance. urlkwargs: search_index: index name Returns: tuple with search and urlarguments """ facets = get_facet_configuration(search_index) # Query filter search, urlkwargs = _query_filter(search, urlkwargs, facets.get("filters", {})) # Post filter search, urlkwargs = _post_filter(search, urlkwargs, facets.get("post_filters", {})) return search, urlkwargs
def inspire_filter_factory(search, urlkwargs, search_index): """Copies behaviour of default facets factory but without the aggregations, As facets factory is also responsible for filtering the year and author (invenio mess) Args: search: Elastic search DSL search instance. urlkwargs: search_index: index name Returns: tuple with search and urlarguments """ facets = get_facet_configuration(search_index) # Query filter search, urlkwargs = _query_filter( search, urlkwargs, facets.get("filters", {})) # Post filter search, urlkwargs = _post_filter( search, urlkwargs, facets.get("post_filters", {})) return search, urlkwargs