invenio-app-rdm
invenio-app-rdm copied to clipboard
Guest access request: viewing request timeline UI as owner fails
Package version (if known): v12.0.0
Describe the bug
When a guest requests access to a record with restricted files and I (as the record owner) accept the request, the timeline/detail page for the request fails to render for me (as the record owner).
E.g. after accepting the access request, visiting https://localhost:5000/me/requests/c26b945c-b0ab-4246-ae10-88b094c0c862# fails with the following stack trace:
127.0.0.1 - - [06/Aug/2024 22:21:41] "GET /me/requests/c26b945c-b0ab-4246-ae10-88b094c0c862 HTTP/1.1" 500 -
Traceback (most recent call last):
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 2552, in __call__
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/werkzeug/middleware/proxy_fix.py", line 187, in __call__
return self.app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/werkzeug/middleware/dispatcher.py", line 78, in __call__
return app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 2532, in wsgi_app
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 2529, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask/app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/flask_login/utils.py", line 290, in decorated_view
return current_app.ensure_sync(func)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/mmoser/rdm/modules/invenio-requests/invenio_requests/views/decorators.py", line 30, in view
return f(**kwargs)
^^^^^^^^^^^
File "/home/mmoser/.local/share/virtualenvs/tu-data-hHy_bWtj/lib/python3.12/site-packages/invenio_app_rdm/requests_ui/views/requests.py", line 179, in user_dashboard_request_view
record = topic["record"] # None when draft
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'record'
Steps to Reproduce
- Create record with restricted files
- Visit the record's landing page via another browser or incognito tab
- Create a guest access request
- Accept the access request as the record owner
- See the 500 page
The values of some relevant variables in the Werkzeug Debugger:
>>> request
<invenio_requests.services.requests.results.RequestItem object at 0x789c861b0140>
>>> request.data
{'id': 'c26b945c-b0ab-4246-ae10-88b094c0c862', 'created': '2024-08-06T17:22:32.944858+00:00', 'updated': '2024-08-06T20:13:04.994666+00:00', 'links': {'actions': {}, 'self': 'https://localhost:5000/api/requests/c26b945c-b0ab-4246-ae10-88b094c0c , 'self_html': 'https://localhost:5000/me/requests/c26b945c-b0ab-4246-ae10-88b094c0c8, 'comments': 'https://localhost:5000/api/requests/c26b945c-b0ab-4246-ae10-88b094c0c, }, }
>>> request['topic']
{'record': 'f8kp2-xda53'}
>>> request['receiver']
{'user': '2'}
>>> request._obj.topic
<RDMRecordProxy {'record': 'f8kp2-xda53'} (None)>
>>> request._obj.topic.resolve()
invenio_rdm_records.records.api.RDMRecord({'id': 'f8kp2-xda53', 'pid': {'pk': 122588, 'status': 'R', 'obj_type': 'rec', 'pid_type': 'recid'}, 'pids': {'doi': {'client': 'datacite', 'provider': 'datacite', 'identifier': '10.70124/f8kp2-xda53'}, 'oai': {'provider': 'oai', 'identifier': 'oai:test.researchdata.tuwien.ac.at:f8kp2-xda53'}}, 'files': {'enabled': True}, })
>>> topic
{'permissions': {}, 'record_ui': None}
I can reproduce this as well.