Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions modules/invenio-records-rest/invenio_records_rest/facets.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,19 @@ def _create_filter_dsl(urlkwargs, definitions):
for name, filter_factory in definitions.items():
values = request.values.getlist(name, type=text_type)
if values:
filters.append(filter_factory(values))
for v in values:
urlkwargs.add(name, v)

if name in ("Access", "accessRights") and "new_accessRights" in definitions:
new_accessrights_filters = definitions["new_accessRights"]["filters"]["filters"]
access_rights_queries = []
for v in values:
if v in new_accessrights_filters:
access_rights_queries.append(Q(new_accessrights_filters[v]))
urlkwargs.add(name, v)
if access_rights_queries:
filters.append(Q('bool', should=access_rights_queries))
else:
filters.append(filter_factory(values))
for v in values:
urlkwargs.add(name, v)
return (filters, urlkwargs)


Expand Down
3 changes: 2 additions & 1 deletion modules/invenio-records-rest/invenio_records_rest/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -853,8 +853,9 @@ def url_args_check():
if size * page < search_result.hits.total and \
size * page < self.max_result_window:
links['next'] = url_for(endpoint, page=page + 1, **urlkwargs)
from weko_search_ui.utils import combine_aggs
from weko_search_ui.utils import combine_aggs, fix_aggregations_accessrights
search_result = combine_aggs(search_result.to_dict())
search_result = fix_aggregations_accessrights(search_result)
return self.make_response(
pid_fetcher=self.pid_fetcher,
search_result=search_result,
Expand Down
53 changes: 52 additions & 1 deletion modules/invenio-records-rest/tests/test_facets.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,57 @@ def test_create_filter_dsl():
assert not filters
assert args == kwargs

def test_create_filter_dsl_accessrights():
app = Flask('testapp')
# Definition of new_accessRights
definitions = {
"accessRights": lambda values: Q('terms', accessRights=values),
"new_accessRights": {
"filters": {
"filters": {
"open": {"term": {"accessRights": "open"}},
"closed": {"term": {"accessRights": "closed"}},
}
}
}
}
# Values included in new_accessrights_filters
with app.test_request_context('?accessRights=open&accessRights=closed'):
kwargs = MultiDict()
filters, args = _create_filter_dsl(kwargs, definitions)
assert len(filters) == 1
assert filters[0].to_dict() == {
"bool": {
"should": [
{"term": {"accessRights": "open"}},
{"term": {"accessRights": "closed"}}
]
}
}
assert args.getlist('accessRights') == ['open', 'closed']

# Values not included in new_accessrights_filters
with app.test_request_context('?accessRights=unknown'):
kwargs = MultiDict()
filters, args = _create_filter_dsl(kwargs, definitions)
assert filters == []
assert args.getlist('accessRights') == []

# When the request value is empty
with app.test_request_context(''):
kwargs = MultiDict()
filters, args = _create_filter_dsl(kwargs, definitions)
assert filters == []
assert args == kwargs

definitions = {
"other": lambda values: Q('terms', other=values),
}
with app.test_request_context('?other=open'):
kwargs = MultiDict()
filters, args = _create_filter_dsl(kwargs, definitions)
assert filters == [Q('terms', other=['open'])]
assert args.getlist('other') == ['open']

def test_post_filter(app):
"""Test post filter."""
Expand Down Expand Up @@ -242,4 +293,4 @@ def test_default_facets_factory(app, db, search_user, redis_connect):
assert 'aggs' not in search.to_dict()
assert 'post_filter' not in search.to_dict()
assert 'bool' not in search.to_dict()['query']
redis_connect.delete(test_redis_key)
redis_connect.delete(test_redis_key)
3 changes: 2 additions & 1 deletion modules/invenio-records/invenio_records/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,11 @@ def __custom_record_metadata(cls, record_metadata: dict):
Args:
record_metadata (dict): Record metadata.
"""
from weko_records.utils import replace_fqdn_of_file_metadata
from weko_records.utils import replace_fqdn_of_file_metadata, update_embargo_rights
for k, v in record_metadata.items():
if isinstance(v, dict) and v.get('attribute_type') == 'file':
replace_fqdn_of_file_metadata(v.get("attribute_value_mlt", []))
update_embargo_rights(record_metadata)

@classmethod
def get_records(cls, ids, with_deleted=False):
Expand Down
Loading
Loading