Requesting a list response with an unsupported set leads to AttributeError
Created by: yytosi
Reproduce:
curl "localhost:6003/v0/oai?verb=ListRecords&metadataPrefix=oai_dc&set=fsd"
Result:
<html><title>500: Internal Server Error</title><body>500: Internal Server Error</body></html>
Log output:
2020-12-03 13:59:27,617 ERROR(tornado.application): Uncaught exception GET /v0/oai?metadataPrefix=ead3&verb=ListRecords&set=fsd (xxx.xxx.xxx.xxx)
HTTPServerRequest(protocol='http', host='xxx.xxx.xxx.xxx:6003', method='GET', uri='/v0/oai?metadataPrefix=ead3&verb=ListRecords&set=fsd', version='HTTP/1.1', remote_ip='xxx.xxx.xxx.xxx')
Traceback (most recent call last):
File "/venv/kuha2/lib/python3.5/site-packages/tornado/web.py", line 1703, in _execute
result = await result
File "/kuha_oai_pmh_repo_handler/kuha_oai_pmh_repo_handler/handlers.py", line 269, in get
await self._router(args)
File "/kuha_oai_pmh_repo_handler/kuha_oai_pmh_repo_handler/handlers.py", line 249, in _router
await _route_callable()
File "/kuha_oai_pmh_repo_handler/kuha_oai_pmh_repo_handler/genshi_loader.py", line 128, in wrapper
context = await ctx_func(ctx)
File "/kuha_oai_pmh_repo_handler/kuha_oai_pmh_repo_handler/handlers.py", line 164, in _list_records
await self._handle_list_request(self._query_relative_records)
File "/kuha_oai_pmh_repo_handler/kuha_oai_pmh_repo_handler/handlers.py", line 221, in _handle_list_request
_filter=_filter
File "/kuha_common/kuha_common/query.py", line 289, in query_count
Query.construct(**kwargs),
File "/kuha_common/kuha_common/document_store/query.py", line 270, in construct
query_dict.update({key: value_builder_fun(value)})
File "/kuha_common/kuha_common/document_store/query.py", line 76, in _build_filter
path = field.path
AttributeError: 'NoneType' object has no attribute 'path'
Expected OAI response with error code “noRecordsMatch”
Proposed fix
diff --git a/kuha_oai_pmh_repo_handler/oai/records.py b/kuha_oai_pmh_repo_handler/oai/records.py
index 882ade9..cb28e21 100644
--- a/kuha_oai_pmh_repo_handler/oai/records.py
+++ b/kuha_oai_pmh_repo_handler/oai/records.py
@@ -198,7 +198,10 @@ def get_query_filter_for_set(set_request):
key, value = set_request.split(':')
else:
return None
- return {get_record_query_field_by_setspec(key): value}
+ query_field = get_record_query_field_by_setspec(key)
+ if query_field is None:
+ return None
+ return {query_field: value}