Hi, it seems that the /patches-API is broken under certain conditions. The API call throws an exception if the following conditions are met: - The user is logged in a browser - In the browser, the user requests /api/patches/<someid>/ - The user is maintainer of the project related to <someid>
This fault can easily be reproduced with a vanilla patchwork instance: 1. ./manage.py createsuperuser # create 'admin' superuser 2. Login in a browser as admin 3. Create some new project 4. ./manage.py parsearchive list.mbox # import some patches 6. In the browser, navigate to /admin/auth/user/1/change and add the user as maintainer of the project 7. In the browser, navigate to /api/patches/1 8. Exception is thrown The exception is not thrown, if step 6 is either skipped or reverted. Please find the backtrace attached. Thanks Ralf
web_1 | Internal Server Error: /api/patches/1/ web_1 | Traceback (most recent call last): web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner web_1 | response = get_response(request) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/core/handlers/base.py", line 145, in _get_response web_1 | response = self.process_exception_by_middleware(e, request) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/core/handlers/base.py", line 143, in _get_response web_1 | response = response.render() web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/response.py", line 105, in render web_1 | self.content = self.rendered_content web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/response.py", line 70, in rendered_content web_1 | ret = renderer.render(self.data, accepted_media_type, context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 724, in render web_1 | context = self.get_context(data, accepted_media_type, renderer_context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 695, in get_context web_1 | 'put_form': self.get_rendered_html_form(data, view, 'PUT', request), web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 511, in get_rendered_html_form web_1 | return self.render_form_for_serializer(serializer) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 518, in render_form_for_serializer web_1 | return form_renderer.render( web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 372, in render web_1 | return template.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render web_1 | return self.template.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 171, in render web_1 | return self._render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/test/utils.py", line 95, in instrumented_test_render web_1 | return self.nodelist.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 936, in render web_1 | bit = node.render_annotated(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated web_1 | return self.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/defaulttags.py", line 209, in render web_1 | nodelist.append(node.render_annotated(context)) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated web_1 | return self.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/defaulttags.py", line 309, in render web_1 | return nodelist.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 936, in render web_1 | bit = node.render_annotated(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated web_1 | return self.render(context) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/library.py", line 192, in render web_1 | output = self.func(*resolved_args, **resolved_kwargs) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/templatetags/rest_framework.py", line 87, in render_field web_1 | return renderer.render_field(field, style) web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 339, in render_field web_1 | field = field.as_form_field() web_1 | File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/utils/serializer_helpers.py", line 122, in as_form_field web_1 | for key, value in self.value.items(): web_1 | AttributeError: 'list' object has no attribute 'items' web_1 | "GET /api/patches/1/ HTTP/1.1" 500 235336
_______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork