Last active
August 29, 2015 14:12
-
-
Save ajrouvoet/4e2dc405cc279b7bda32 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
AssertionError at /api/1.0/product | |
Expected view ProductViewSet to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly. | |
Request Method: OPTIONS | |
Request URL: http://localhost:8000/api/1.0/product | |
Django Version: 1.7 | |
Exception Type: AssertionError | |
Exception Expected view ProductViewSet to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly. | |
Value: | |
Exception /home/arjen/repositories/x/y/backend/staging/api/.env/lib/python3.4/ | |
Location: site-packages/rest_framework/generics.py in get_object, line 238 | |
Python /home/arjen/repositories/x/y/backend/staging/api/.env/bin/python | |
Executable: | |
Python Version: 3.4.2 | |
['/home/arjen/repositories/x/y/backend/staging/api/src', | |
'/usr/lib/python34.zip', | |
'/usr/lib/python3.4', | |
Python Path: '/usr/lib/python3.4/plat-linux', | |
'/usr/lib/python3.4/lib-dynload', | |
'/home/arjen/repositories/x/y/backend/staging/api/.env/lib/python3.4/site-packages'] | |
Server time: Thu, 1 Jan 2015 22:52:51 +0000 | |
Traceback Switch to copy-and-paste view | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/django/core/handlers/base.py in get_response | |
104. response = middleware_method(request, callback, callback_args, callback_kwargs) | |
105. if response: | |
106. break | |
108. if response is None: | |
109. wrapped_callback = self.make_view_atomic(callback) | |
110. try: | |
111. response = wrapped_callback(request, *callback_args, **callback_kwargs) | |
... | |
112. except Exception as e: | |
113. # If the view raised an exception, run it through exception | |
114. # middleware, and if the exception middleware returns a | |
115. # response, use that. Otherwise, reraise the exception. | |
116. for middleware_method in self._exception_middleware: | |
117. response = middleware_method(request, e) | |
▶ Local vars | |
Variable Value | |
urlconf 'staging.urls' | |
callback_kwargs {} | |
'<WSGIRequest\n' | |
'path:/api/1.0/product,\n' | |
'GET:<QueryDict: {}>,\n' | |
'POST:<QueryDict: {}>,\n' | |
'COOKIES:{},\n' | |
"META:{'COLORFGBG': '12;default',\n" | |
" 'COLORTERM': 'rxvt',\n" | |
" 'CONTENT_LENGTH': '',\n" | |
" 'CONTENT_TYPE': 'text/plain',\n" | |
" 'CSRF_COOKIE': 'XWOMYRwGOHY0VwgfSeufTyGWS2sMymf2',\n" | |
" 'DBUS_SESSION_BUS_ADDRESS': " | |
"'unix:abstract=/tmp/dbus-ZkFA1r6kek,guid=31d80f0b41781043e230c0eb54a5ad4c',\n" | |
" 'DERBY_HOME': '/opt/java/db',\n" | |
" 'DISPLAY': ':0.0',\n" | |
" 'DJANGO_SETTINGS_MODULE': 'staging.settings',\n" | |
" 'EDITOR': 'vim',\n" | |
" 'GATEWAY_INTERFACE': 'CGI/1.1',\n" | |
" 'GPG_AGENT_INFO': '/run/user/1000/keyring/gpg:0:1',\n" | |
" 'GRADLE_HOME': '/usr/share/java/gradle',\n" | |
" 'GTK_MODULES': 'canberra-gtk-module',\n" | |
" 'HG': '/usr/bin/hg',\n" | |
" 'HISTFILE': '/home/arjen/.history',\n" | |
" 'HISTSIZE': '10000',\n" | |
" 'HOME': '/home/arjen',\n" | |
" 'HTTP_ACCEPT': 'application/json; indent=2',\n" | |
" 'HTTP_HOST': 'localhost:8000',\n" | |
" 'HTTP_USER_AGENT': 'curl/7.39.0',\n" | |
" 'J2REDIR': '/opt/java/jre',\n" | |
" 'J2SDKDIR': '/opt/java',\n" | |
" 'JAVA_HOME': '/opt/java',\n" | |
" 'LANG': 'en_US.UTF-8',\n" | |
" 'LIQUIBASE_HOME': '/opt/liquibase/',\n" | |
" 'LOGNAME': 'arjen',\n" | |
" 'MAIL': '/var/spool/mail/arjen',\n" | |
" 'MOZ_PLUGIN_PATH': '/usr/lib/mozilla/plugins',\n" | |
" 'OLDPWD': '/home/arjen',\n" | |
" 'PANEL_FIFO': '/tmp/panel-fifo',\n" | |
" 'PANEL_HEIGHT': '20',\n" | |
" 'PATH': " | |
"'/home/arjen/repositories/x/y/backend/staging/api/.env/bin:/home/arjen/.local/bin/:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/android-sdk/build-tools/19.0.3/:/opt/android-sdk/platform-tools:/usr/share/java/gradle/bin:/opt/java/bin:/opt/java/db/bin:/opt/java/jre/bin:/usr/lib/jvm/default/bin:/opt/liquibase/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/ruby/gems/1.9.1/:/usr/lib/ruby/gems/2.0.0/:/home/arjen/.gem/ruby/2.0.0/bin/:/home/arjen/.gem/ruby/2.1.0/bin/:/home/arjen/.cabal/bin',\n" | |
" 'PATH_INFO': '/api/1.0/product',\n" | |
" 'PS1': '(.env) \\n %{\\x1b[37m%}%~%{\\x1b[36m%} λ " | |
"%{\\x1b[37m%}%{\\x1b[00m%} ',\n" | |
request " 'PWD': '/home/arjen/repositories/x/y/backend/staging/api/src',\n" | |
" 'QUERY_STRING': '',\n" | |
" 'REMOTE_ADDR': '127.0.0.1',\n" | |
" 'REMOTE_HOST': '',\n" | |
" 'REQUEST_METHOD': 'OPTIONS',\n" | |
" 'RUN_MAIN': 'true',\n" | |
" 'SAVEHIST': '10000',\n" | |
" 'SBT_OPTS': '-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled '\n" | |
" '-XX:MaxPermSize=256M',\n" | |
" 'SCRIPT_NAME': '',\n" | |
" 'SERVER_NAME': 'localhost.localdomain',\n" | |
" 'SERVER_PORT': '8000',\n" | |
" 'SERVER_PROTOCOL': 'HTTP/1.1',\n" | |
" 'SERVER_SOFTWARE': 'WSGIServer/0.2',\n" | |
" 'SHELL': '/bin/zsh',\n" | |
" 'SHLVL': '4',\n" | |
" 'SSH_AGENT_PID': '540',\n" | |
" 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh',\n" | |
" 'TERM': 'rxvt-unicode-256color',\n" | |
" 'TERMINFO': '/usr/share/terminfo',\n" | |
" 'TZ': 'UTC',\n" | |
" 'USER': 'arjen',\n" | |
" 'VIRTUAL_ENV': " | |
"'/home/arjen/repositories/x/y/backend/staging/api/.env',\n" | |
" 'WINDOWID': '56623114',\n" | |
" 'WINDOWPATH': '1',\n" | |
" 'XAUTHORITY': '/home/arjen/.Xauthority',\n" | |
" 'XDG_CONFIG_HOME': '/home/arjen/.config',\n" | |
" 'XDG_RUNTIME_DIR': '/run/user/1000',\n" | |
" 'XDG_SEAT': 'seat0',\n" | |
" 'XDG_SESSION_ID': 'c1',\n" | |
" 'XDG_VTNR': '1',\n" | |
" '_': " | |
"'/home/arjen/repositories/x/y/backend/staging/api/.env/bin/python',\n" | |
" '_JAVA_AWT_WM_NONREPARENTING': '1',\n" | |
" 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' " | |
"encoding='UTF-8'>,\n" | |
" 'wsgi.file_wrapper': <class 'wsgiref.util.FileWrapper'>,\n" | |
" 'wsgi.input': <_io.BufferedReader name=6>,\n" | |
" 'wsgi.multiprocess': False,\n" | |
" 'wsgi.multithread': True,\n" | |
" 'wsgi.run_once': False,\n" | |
" 'wsgi.url_scheme': 'http',\n" | |
" 'wsgi.version': (1, 0)}>" | |
resolver <RegexURLResolver 'staging.urls' (None:None) ^/> | |
callback <function ProductViewSet at 0x7f4900a70620> | |
wrapped_callback <function ProductViewSet at 0x7f4900a70620> | |
response None | |
self <django.core.handlers.wsgi.WSGIHandler object at 0x7f490457c5c0> | |
resolver_match ResolverMatch(func=<function ProductViewSet at 0x7f4900a70620>, args=(), kwargs={}, url_name='product-list', app_name='None', namespace='') | |
middleware_method <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f48fffc24a8>> | |
callback_args () | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/django/views/decorators/csrf.py in wrapped_view | |
50. """ | |
51. Marks a view function as being exempt from the CSRF view protection. | |
52. """ | |
53. # We could just do view_func.csrf_exempt = True, but decorators | |
54. # are nicer if they don't have side-effects, so we return a new | |
55. # function. | |
56. def wrapped_view(*args, **kwargs): | |
57. return view_func(*args, **kwargs) | |
... | |
58. wrapped_view.csrf_exempt = True | |
59. return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view) | |
▶ Local vars | |
Variable Value | |
(<WSGIRequest | |
path:/api/1.0/product, | |
GET:<QueryDict: {}>, | |
POST:<QueryDict: {}>, | |
COOKIES:{}, | |
META:{'COLORFGBG': '12;default', | |
'COLORTERM': 'rxvt', | |
'CONTENT_LENGTH': '', | |
'CONTENT_TYPE': 'text/plain', | |
'CSRF_COOKIE': 'XWOMYRwGOHY0VwgfSeufTyGWS2sMymf2', | |
'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-ZkFA1r6kek,guid=31d80f0b41781043e230c0eb54a5ad4c', | |
'DERBY_HOME': '/opt/java/db', | |
'DISPLAY': ':0.0', | |
'DJANGO_SETTINGS_MODULE': 'staging.settings', | |
'EDITOR': 'vim', | |
'GATEWAY_INTERFACE': 'CGI/1.1', | |
'GPG_AGENT_INFO': '/run/user/1000/keyring/gpg:0:1', | |
'GRADLE_HOME': '/usr/share/java/gradle', | |
'GTK_MODULES': 'canberra-gtk-module', | |
'HG': '/usr/bin/hg', | |
'HISTFILE': '/home/arjen/.history', | |
'HISTSIZE': '10000', | |
'HOME': '/home/arjen', | |
'HTTP_ACCEPT': 'application/json; indent=2', | |
'HTTP_HOST': 'localhost:8000', | |
'HTTP_USER_AGENT': 'curl/7.39.0', | |
'J2REDIR': '/opt/java/jre', | |
'J2SDKDIR': '/opt/java', | |
'JAVA_HOME': '/opt/java', | |
'LANG': 'en_US.UTF-8', | |
'LIQUIBASE_HOME': '/opt/liquibase/', | |
'LOGNAME': 'arjen', | |
'MAIL': '/var/spool/mail/arjen', | |
'MOZ_PLUGIN_PATH': '/usr/lib/mozilla/plugins', | |
'OLDPWD': '/home/arjen', | |
'PANEL_FIFO': '/tmp/panel-fifo', | |
'PANEL_HEIGHT': '20', | |
'PATH': '/home/arjen/repositories/x/y/backend/staging/api/.env/bin:/home/arjen/.local/bin/:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/android-sdk/build-tools/19.0.3/:/opt/android-sdk/platform-tools:/usr/share/java/gradle/bin:/opt/java/bin:/opt/java/db/bin:/opt/java/jre/bin:/usr/lib/jvm/default/bin:/opt/liquibase/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/ruby/gems/1.9.1/:/usr/lib/ruby/gems/2.0.0/:/home/arjen/.gem/ruby/2.0.0/bin/:/home/arjen/.gem/ruby/2.1.0/bin/:/home/arjen/.cabal/bin', | |
'PATH_INFO': '/api/1.0/product', | |
'PS1': '(.env) \n %{\x1b[37m%}%~%{\x1b[36m%} λ %{\x1b[37m%}%{\x1b[00m%} ', | |
args 'PWD': '/home/arjen/repositories/x/y/backend/staging/api/src', | |
'QUERY_STRING': '', | |
'REMOTE_ADDR': '127.0.0.1', | |
'REMOTE_HOST': '', | |
'REQUEST_METHOD': 'OPTIONS', | |
'RUN_MAIN': 'true', | |
'SAVEHIST': '10000', | |
'SBT_OPTS': '-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled ' | |
'-XX:MaxPermSize=256M', | |
'SCRIPT_NAME': '', | |
'SERVER_NAME': 'localhost.localdomain', | |
'SERVER_PORT': '8000', | |
'SERVER_PROTOCOL': 'HTTP/1.1', | |
'SERVER_SOFTWARE': 'WSGIServer/0.2', | |
'SHELL': '/bin/zsh', | |
'SHLVL': '4', | |
'SSH_AGENT_PID': '540', | |
'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', | |
'TERM': 'rxvt-unicode-256color', | |
'TERMINFO': '/usr/share/terminfo', | |
'TZ': 'UTC', | |
'USER': 'arjen', | |
'VIRTUAL_ENV': '/home/arjen/repositories/x/y/backend/staging/api/.env', | |
'WINDOWID': '56623114', | |
'WINDOWPATH': '1', | |
'XAUTHORITY': '/home/arjen/.Xauthority', | |
'XDG_CONFIG_HOME': '/home/arjen/.config', | |
'XDG_RUNTIME_DIR': '/run/user/1000', | |
'XDG_SEAT': 'seat0', | |
'XDG_SESSION_ID': 'c1', | |
'XDG_VTNR': '1', | |
'_': '/home/arjen/repositories/x/y/backend/staging/api/.env/bin/python', | |
'_JAVA_AWT_WM_NONREPARENTING': '1', | |
'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>, | |
'wsgi.file_wrapper': <class 'wsgiref.util.FileWrapper'>, | |
'wsgi.input': <_io.BufferedReader name=6>, | |
'wsgi.multiprocess': False, | |
'wsgi.multithread': True, | |
'wsgi.run_once': False, | |
'wsgi.url_scheme': 'http', | |
'wsgi.version': (1, 0)}>,) | |
view_func <function ProductViewSet at 0x7f4902ac2510> | |
kwargs {} | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/viewsets.py in view | |
78. setattr(self, method, handler) | |
80. # Patch this in as it's otherwise only present from 1.5 onwards | |
81. if hasattr(self, 'get') and not hasattr(self, 'head'): | |
82. self.head = self.get | |
84. # And continue as usual | |
85. return self.dispatch(request, *args, **kwargs) | |
... | |
87. # take name and docstring from class | |
88. update_wrapper(view, cls, updated=()) | |
90. # and possible attributes set by decorators | |
91. # like csrf_exempt from dispatch | |
▶ Local vars | |
Variable Value | |
cls <class 'core.views.ProductViewSet'> | |
method 'delete' | |
action 'batch_delete' | |
self <core.views.ProductViewSet object at 0x7f48febf9c88> | |
initkwargs {'suffix': 'List'} | |
kwargs {} | |
handler <bound method ProductViewSet.batch_delete of <core.views.ProductViewSet object at 0x7f48febf9c88>> | |
'<WSGIRequest\n' | |
'path:/api/1.0/product,\n' | |
'GET:<QueryDict: {}>,\n' | |
'POST:<QueryDict: {}>,\n' | |
'COOKIES:{},\n' | |
"META:{'COLORFGBG': '12;default',\n" | |
" 'COLORTERM': 'rxvt',\n" | |
" 'CONTENT_LENGTH': '',\n" | |
" 'CONTENT_TYPE': 'text/plain',\n" | |
" 'CSRF_COOKIE': 'XWOMYRwGOHY0VwgfSeufTyGWS2sMymf2',\n" | |
" 'DBUS_SESSION_BUS_ADDRESS': " | |
"'unix:abstract=/tmp/dbus-ZkFA1r6kek,guid=31d80f0b41781043e230c0eb54a5ad4c',\n" | |
" 'DERBY_HOME': '/opt/java/db',\n" | |
" 'DISPLAY': ':0.0',\n" | |
" 'DJANGO_SETTINGS_MODULE': 'staging.settings',\n" | |
" 'EDITOR': 'vim',\n" | |
" 'GATEWAY_INTERFACE': 'CGI/1.1',\n" | |
" 'GPG_AGENT_INFO': '/run/user/1000/keyring/gpg:0:1',\n" | |
" 'GRADLE_HOME': '/usr/share/java/gradle',\n" | |
" 'GTK_MODULES': 'canberra-gtk-module',\n" | |
" 'HG': '/usr/bin/hg',\n" | |
" 'HISTFILE': '/home/arjen/.history',\n" | |
" 'HISTSIZE': '10000',\n" | |
" 'HOME': '/home/arjen',\n" | |
" 'HTTP_ACCEPT': 'application/json; indent=2',\n" | |
" 'HTTP_HOST': 'localhost:8000',\n" | |
" 'HTTP_USER_AGENT': 'curl/7.39.0',\n" | |
" 'J2REDIR': '/opt/java/jre',\n" | |
" 'J2SDKDIR': '/opt/java',\n" | |
" 'JAVA_HOME': '/opt/java',\n" | |
" 'LANG': 'en_US.UTF-8',\n" | |
" 'LIQUIBASE_HOME': '/opt/liquibase/',\n" | |
" 'LOGNAME': 'arjen',\n" | |
" 'MAIL': '/var/spool/mail/arjen',\n" | |
" 'MOZ_PLUGIN_PATH': '/usr/lib/mozilla/plugins',\n" | |
" 'OLDPWD': '/home/arjen',\n" | |
" 'PANEL_FIFO': '/tmp/panel-fifo',\n" | |
" 'PANEL_HEIGHT': '20',\n" | |
" 'PATH': " | |
"'/home/arjen/repositories/x/y/backend/staging/api/.env/bin:/home/arjen/.local/bin/:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/android-sdk/build-tools/19.0.3/:/opt/android-sdk/platform-tools:/usr/share/java/gradle/bin:/opt/java/bin:/opt/java/db/bin:/opt/java/jre/bin:/usr/lib/jvm/default/bin:/opt/liquibase/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/ruby/gems/1.9.1/:/usr/lib/ruby/gems/2.0.0/:/home/arjen/.gem/ruby/2.0.0/bin/:/home/arjen/.gem/ruby/2.1.0/bin/:/home/arjen/.cabal/bin',\n" | |
" 'PATH_INFO': '/api/1.0/product',\n" | |
" 'PS1': '(.env) \\n %{\\x1b[37m%}%~%{\\x1b[36m%} λ " | |
"%{\\x1b[37m%}%{\\x1b[00m%} ',\n" | |
request " 'PWD': '/home/arjen/repositories/x/y/backend/staging/api/src',\n" | |
" 'QUERY_STRING': '',\n" | |
" 'REMOTE_ADDR': '127.0.0.1',\n" | |
" 'REMOTE_HOST': '',\n" | |
" 'REQUEST_METHOD': 'OPTIONS',\n" | |
" 'RUN_MAIN': 'true',\n" | |
" 'SAVEHIST': '10000',\n" | |
" 'SBT_OPTS': '-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled '\n" | |
" '-XX:MaxPermSize=256M',\n" | |
" 'SCRIPT_NAME': '',\n" | |
" 'SERVER_NAME': 'localhost.localdomain',\n" | |
" 'SERVER_PORT': '8000',\n" | |
" 'SERVER_PROTOCOL': 'HTTP/1.1',\n" | |
" 'SERVER_SOFTWARE': 'WSGIServer/0.2',\n" | |
" 'SHELL': '/bin/zsh',\n" | |
" 'SHLVL': '4',\n" | |
" 'SSH_AGENT_PID': '540',\n" | |
" 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh',\n" | |
" 'TERM': 'rxvt-unicode-256color',\n" | |
" 'TERMINFO': '/usr/share/terminfo',\n" | |
" 'TZ': 'UTC',\n" | |
" 'USER': 'arjen',\n" | |
" 'VIRTUAL_ENV': " | |
"'/home/arjen/repositories/x/y/backend/staging/api/.env',\n" | |
" 'WINDOWID': '56623114',\n" | |
" 'WINDOWPATH': '1',\n" | |
" 'XAUTHORITY': '/home/arjen/.Xauthority',\n" | |
" 'XDG_CONFIG_HOME': '/home/arjen/.config',\n" | |
" 'XDG_RUNTIME_DIR': '/run/user/1000',\n" | |
" 'XDG_SEAT': 'seat0',\n" | |
" 'XDG_SESSION_ID': 'c1',\n" | |
" 'XDG_VTNR': '1',\n" | |
" '_': " | |
"'/home/arjen/repositories/x/y/backend/staging/api/.env/bin/python',\n" | |
" '_JAVA_AWT_WM_NONREPARENTING': '1',\n" | |
" 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' " | |
"encoding='UTF-8'>,\n" | |
" 'wsgi.file_wrapper': <class 'wsgiref.util.FileWrapper'>,\n" | |
" 'wsgi.input': <_io.BufferedReader name=6>,\n" | |
" 'wsgi.multiprocess': False,\n" | |
" 'wsgi.multithread': True,\n" | |
" 'wsgi.run_once': False,\n" | |
" 'wsgi.url_scheme': 'http',\n" | |
" 'wsgi.version': (1, 0)}>" | |
args () | |
actions {'delete': 'batch_delete', 'get': 'list', 'put': 'batch_update'} | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/views.py in dispatch | |
400. self.http_method_not_allowed) | |
401. else: | |
402. handler = self.http_method_not_allowed | |
404. response = handler(request, *args, **kwargs) | |
406. except Exception as exc: | |
407. response = self.handle_exception(exc) | |
... | |
409. self.response = self.finalize_response(request, response, *args, **kwargs) | |
410. return self.response | |
412. def options(self, request, *args, **kwargs): | |
413. """ | |
▶ Local vars | |
Variable Value | |
args () | |
request <rest_framework.request.Request object at 0x7f48febf9e48> | |
handler <bound method ProductViewSet.options of <core.views.ProductViewSet object at 0x7f48febf9c88>> | |
kwargs {} | |
self <core.views.ProductViewSet object at 0x7f48febf9c88> | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/views.py in dispatch | |
397. # Get the appropriate handler method | |
398. if request.method.lower() in self.http_method_names: | |
399. handler = getattr(self, request.method.lower(), | |
400. self.http_method_not_allowed) | |
401. else: | |
402. handler = self.http_method_not_allowed | |
404. response = handler(request, *args, **kwargs) | |
... | |
406. except Exception as exc: | |
407. response = self.handle_exception(exc) | |
409. self.response = self.finalize_response(request, response, *args, **kwargs) | |
410. return self.response | |
▶ Local vars | |
Variable Value | |
args () | |
request <rest_framework.request.Request object at 0x7f48febf9e48> | |
handler <bound method ProductViewSet.options of <core.views.ProductViewSet object at 0x7f48febf9c88>> | |
kwargs {} | |
self <core.views.ProductViewSet object at 0x7f48febf9c88> | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/views.py in options | |
412. def options(self, request, *args, **kwargs): | |
413. """ | |
414. Handler method for HTTP 'OPTIONS' request. | |
415. """ | |
416. if self.metadata_class is None: | |
417. return self.http_method_not_allowed(request, *args, **kwargs) | |
418. data = self.metadata_class().determine_metadata(request, self) | |
... | |
419. return Response(data, status=status.HTTP_200_OK) | |
▶ Local vars | |
Variable Value | |
args () | |
request <rest_framework.request.Request object at 0x7f48febf9e48> | |
kwargs {} | |
self <core.views.ProductViewSet object at 0x7f48febf9c88> | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/metadata.py in determine_metadata | |
56. def determine_metadata(self, request, view): | |
57. metadata = OrderedDict() | |
58. metadata['name'] = view.get_view_name() | |
59. metadata['description'] = view.get_view_description() | |
60. metadata['renders'] = [renderer.media_type for renderer in view.renderer_classes] | |
61. metadata['parses'] = [parser.media_type for parser in view.parser_classes] | |
62. if hasattr(view, 'get_serializer'): | |
63. actions = self.determine_actions(request, view) | |
... | |
64. if actions: | |
65. metadata['actions'] = actions | |
66. return metadata | |
68. def determine_actions(self, request, view): | |
69. """ | |
▶ Local vars | |
Variable Value | |
view <core.views.ProductViewSet object at 0x7f48febf9c88> | |
request <rest_framework.request.Request object at 0x7f48febf9e48> | |
self <rest_framework.metadata.SimpleMetadata object at 0x7f48febf9da0> | |
{'name': 'Product List', | |
'description': '', | |
metadata 'renders': ['application/json', 'text/html'], | |
'parses': ['application/json', | |
'application/x-www-form-urlencoded', | |
'multipart/form-data']} | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/metadata.py in determine_actions | |
75. view.request = clone_request(request, method) | |
76. try: | |
77. # Test global permissions | |
78. if hasattr(view, 'check_permissions'): | |
79. view.check_permissions(view.request) | |
80. # Test object permissions | |
81. if method == 'PUT' and hasattr(view, 'get_object'): | |
82. view.get_object() | |
... | |
83. except (exceptions.APIException, PermissionDenied, Http404): | |
84. pass | |
85. else: | |
86. # If user has appropriate permissions for the view, include | |
87. # appropriate metadata about the fields that should be supplied. | |
88. serializer = view.get_serializer() | |
▶ Local vars | |
Variable Value | |
view <core.views.ProductViewSet object at 0x7f48febf9c88> | |
method 'PUT' | |
self <rest_framework.metadata.SimpleMetadata object at 0x7f48febf9da0> | |
request <rest_framework.request.Request object at 0x7f48febf9e48> | |
actions {} | |
• /home/arjen/repositories/x/y/backend/staging/api/.env/lib/ | |
python3.4/site-packages/rest_framework/generics.py in get_object | |
231. # Perform the lookup filtering. | |
232. lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field | |
234. assert lookup_url_kwarg in self.kwargs, ( | |
235. 'Expected view %s to be called with a URL keyword argument ' | |
236. 'named "%s". Fix your URL conf, or set the `.lookup_field` ' | |
237. 'attribute on the view correctly.' % | |
238. (self.__class__.__name__, lookup_url_kwarg) | |
... | |
239. ) | |
241. filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]} | |
242. obj = get_object_or_404(queryset, **filter_kwargs) | |
244. # May raise a permission denied | |
▶ Local vars | |
Variable Value | |
self <core.views.ProductViewSet object at 0x7f48febf9c88> | |
lookup_url_kwarg 'pk' | |
queryset [<Product: [1] Apples>] | |
[Environment: ] | |
[ ] | |
[ ] | |
[Request Method: OPTIONS ] | |
[Request URL: http://localhost:8000/api/1.0/product ] | |
[ ] | |
[Django Version: 1.7 ] | |
[Python Version: 3.4.2 ] | |
[Installed Applications: ] | |
[('django.contrib.admin', ] | |
[ 'django.contrib.auth', ] | |
[ 'django.contrib.contenttypes', ] | |
[ 'django.contrib.sessions', ] | |
[ 'django.contrib.messages', ] | |
[ 'django.contrib.staticfiles', ] | |
[ 'corsheaders', ] | |
[ 'rest_framework', ] | |
[ 'core') ] | |
[Installed Middleware: ] | |
[('django.contrib.sessions.middleware.SessionMiddleware', ] | |
[ 'corsheaders.middleware.CorsMiddleware', ] | |
[ 'django.middleware.common.CommonMiddleware', ] | |
[ 'django.middleware.csrf.CsrfViewMiddleware', ] | |
[ 'django.contrib.auth.middleware.AuthenticationMiddleware', ] | |
[ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', ] | |
[Share this traceback on a public Web site] | |
Request information | |
GET | |
No GET data | |
POST | |
No POST data | |
FILES | |
No FILES data | |
COOKIES | |
No cookie data | |
META | |
Variable Value | |
wsgi.multiprocess False | |
TZ 'UTC' | |
XDG_VTNR '1' | |
QUERY_STRING '' | |
HG '/usr/bin/hg' | |
HTTP_ACCEPT 'application/json; indent=2' | |
HOME '/home/arjen' | |
LIQUIBASE_HOME '/opt/liquibase/' | |
PS1 '(.env) \n %{\x1b[37m%}%~%{\x1b[36m%} λ %{\x1b[37m%}%{\x1b[00m%} ' | |
MOZ_PLUGIN_PATH '/usr/lib/mozilla/plugins' | |
SERVER_SOFTWARE 'WSGIServer/0.2' | |
GATEWAY_INTERFACE 'CGI/1.1' | |
HISTSIZE '10000' | |
XDG_RUNTIME_DIR '/run/user/1000' | |
USER 'arjen' | |
_JAVA_AWT_WM_NONREPARENTING '1' | |
MAIL '/var/spool/mail/arjen' | |
XDG_SESSION_ID 'c1' | |
DISPLAY ':0.0' | |
COLORTERM 'rxvt' | |
wsgi.file_wrapper '' | |
PANEL_HEIGHT '20' | |
J2REDIR '/opt/java/jre' | |
HISTFILE '/home/arjen/.history' | |
DBUS_SESSION_BUS_ADDRESS 'unix:abstract=/tmp/dbus-ZkFA1r6kek,guid=31d80f0b41781043e230c0eb54a5ad4c' | |
TERM 'rxvt-unicode-256color' | |
wsgi.url_scheme 'http' | |
SAVEHIST '10000' | |
wsgi.version (1, 0) | |
JAVA_HOME '/opt/java' | |
PATH_INFO '/api/1.0/product' | |
_ '/home/arjen/repositories/x/y/backend/staging/api/.env/bin/python' | |
GPG_AGENT_INFO '/run/user/1000/keyring/gpg:0:1' | |
PATH '/home/arjen/repositories/x/y/backend/staging/api/.env/bin:/home/arjen/.local/bin/:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/android-sdk/build-tools/19.0.3/:/opt/android-sdk/platform-tools:/usr/share/java/gradle/bin:/opt/java/bin:/opt/java/db/bin:/opt/java/jre/bin:/usr/lib/jvm/default/bin:/opt/liquibase/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/ruby/gems/1.9.1/:/usr/lib/ruby/gems/2.0.0/:/home/arjen/.gem/ruby/2.0.0/bin/:/home/arjen/.gem/ruby/2.1.0/bin/:/home/arjen/.cabal/bin' | |
SBT_OPTS '-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M' | |
wsgi.input <_io.BufferedReader name=6> | |
REMOTE_ADDR '127.0.0.1' | |
CONTENT_TYPE 'text/plain' | |
CONTENT_LENGTH '' | |
LANG 'en_US.UTF-8' | |
wsgi.errors <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> | |
TERMINFO '/usr/share/terminfo' | |
PWD '/home/arjen/repositories/x/y/backend/staging/api/src' | |
REQUEST_METHOD 'OPTIONS' | |
GTK_MODULES 'canberra-gtk-module' | |
DJANGO_SETTINGS_MODULE 'staging.settings' | |
RUN_MAIN 'true' | |
GRADLE_HOME '/usr/share/java/gradle' | |
SERVER_NAME 'localhost.localdomain' | |
J2SDKDIR '/opt/java' | |
XDG_CONFIG_HOME '/home/arjen/.config' | |
HTTP_USER_AGENT 'curl/7.39.0' | |
REMOTE_HOST '' | |
COLORFGBG '12;default' | |
XDG_SEAT 'seat0' | |
LOGNAME 'arjen' | |
XAUTHORITY '/home/arjen/.Xauthority' | |
OLDPWD '/home/arjen' | |
SERVER_PROTOCOL 'HTTP/1.1' | |
wsgi.run_once False | |
EDITOR 'vim' | |
SERVER_PORT '8000' | |
DERBY_HOME '/opt/java/db' | |
SHELL '/bin/zsh' | |
VIRTUAL_ENV '/home/arjen/repositories/x/y/backend/staging/api/.env' | |
WINDOWPATH '1' | |
PANEL_FIFO '/tmp/panel-fifo' | |
SSH_AUTH_SOCK '/run/user/1000/keyring/ssh' | |
HTTP_HOST 'localhost:8000' | |
WINDOWID '56623114' | |
CSRF_COOKIE 'XWOMYRwGOHY0VwgfSeufTyGWS2sMymf2' | |
SHLVL '4' | |
SCRIPT_NAME '' | |
SSH_AGENT_PID '540' | |
wsgi.multithread True | |
Settings | |
Using settings module staging.settings | |
Setting Value | |
SESSION_EXPIRE_AT_BROWSER_CLOSE False | |
CSRF_COOKIE_PATH '/' | |
EMAIL_USE_TLS False | |
EMAIL_HOST_USER '' | |
WSGI_APPLICATION 'staging.wsgi.application' | |
('django.contrib.admin', | |
'django.contrib.auth', | |
'django.contrib.contenttypes', | |
'django.contrib.sessions', | |
INSTALLED_APPS 'django.contrib.messages', | |
'django.contrib.staticfiles', | |
'corsheaders', | |
'rest_framework', | |
'core') | |
SESSION_CACHE_ALIAS 'default' | |
USE_X_FORWARDED_HOST False | |
LOCALE_PATHS () | |
SESSION_SAVE_EVERY_REQUEST False | |
DEFAULT_INDEX_TABLESPACE '' | |
SEND_BROKEN_LINK_EMAILS False | |
ROOT_URLCONF 'staging.urls' | |
DEFAULT_CONTENT_TYPE 'text/html' | |
USE_I18N True | |
SESSION_COOKIE_PATH '/' | |
SETTINGS_MODULE 'staging.settings' | |
TEST_RUNNER 'django.test.runner.DiscoverRunner' | |
('%Y-%m-%d %H:%M:%S', | |
'%Y-%m-%d %H:%M:%S.%f', | |
'%Y-%m-%d %H:%M', | |
'%Y-%m-%d', | |
'%m/%d/%Y %H:%M:%S', | |
'%m/%d/%Y %H:%M:%S.%f', | |
DATETIME_INPUT_FORMATS '%m/%d/%Y %H:%M', | |
'%m/%d/%Y', | |
'%m/%d/%y %H:%M:%S', | |
'%m/%d/%y %H:%M:%S.%f', | |
'%m/%d/%y %H:%M', | |
'%m/%d/%y') | |
SECRET_KEY '********************' | |
APPEND_SLASH True | |
DEFAULT_CHARSET 'utf-8' | |
COMMENTS_ALLOW_PROFANITIES False | |
FILE_CHARSET 'utf-8' | |
TIME_ZONE 'UTC' | |
EMAIL_HOST 'localhost' | |
LOGOUT_URL '/accounts/logout/' | |
NUMBER_GROUPING 0 | |
DECIMAL_SEPARATOR '.' | |
MONTH_DAY_FORMAT 'F j' | |
AUTH_USER_MODEL 'auth.User' | |
CACHE_MIDDLEWARE_ALIAS 'default' | |
MESSAGE_STORAGE 'django.contrib.messages.storage.fallback.FallbackStorage' | |
USE_TZ True | |
STATIC_URL '/static/' | |
FILE_UPLOAD_DIRECTORY_PERMISSIONS None | |
SESSION_COOKIE_AGE 1209600 | |
LOGGING_CONFIG 'logging.config.dictConfig' | |
CACHE_MIDDLEWARE_SECONDS 600 | |
SESSION_COOKIE_DOMAIN None | |
SIGNING_BACKEND 'django.core.signing.TimestampSigner' | |
THOUSAND_SEPARATOR ',' | |
('django.contrib.staticfiles.finders.FileSystemFinder', | |
STATICFILES_FINDERS 'django.contrib.staticfiles.finders.AppDirectoriesFinder') | |
ALLOWED_HOSTS [] | |
DISALLOWED_USER_AGENTS () | |
FIXTURE_DIRS ('/home/arjen/repositories/x/y/backend/staging/api/src/fixtures/',) | |
DEFAULT_FILE_STORAGE 'django.core.files.storage.FileSystemStorage' | |
YEAR_MONTH_FORMAT 'F Y' | |
ALLOWED_INCLUDE_ROOTS () | |
PASSWORD_RESET_TIMEOUT_DAYS '********************' | |
TRANSACTIONS_MANAGED False | |
ADMIN_FOR () | |
STATIC_ROOT None | |
FILE_UPLOAD_MAX_MEMORY_SIZE 2621440 | |
USE_ETAGS False | |
PASSWORD_HASHERS '********************' | |
LOGIN_URL '/accounts/login/' | |
USE_L10N True | |
ADMINS () | |
CSRF_COOKIE_NAME 'csrftoken' | |
(('af', 'Afrikaans'), | |
('ar', 'Arabic'), | |
('ast', 'Asturian'), | |
('az', 'Azerbaijani'), | |
('bg', 'Bulgarian'), | |
('be', 'Belarusian'), | |
('bn', 'Bengali'), | |
('br', 'Breton'), | |
('bs', 'Bosnian'), | |
('ca', 'Catalan'), | |
('cs', 'Czech'), | |
('cy', 'Welsh'), | |
('da', 'Danish'), | |
('de', 'German'), | |
('el', 'Greek'), | |
('en', 'English'), | |
('en-au', 'Australian English'), | |
('en-gb', 'British English'), | |
('eo', 'Esperanto'), | |
('es', 'Spanish'), | |
('es-ar', 'Argentinian Spanish'), | |
('es-mx', 'Mexican Spanish'), | |
('es-ni', 'Nicaraguan Spanish'), | |
('es-ve', 'Venezuelan Spanish'), | |
('et', 'Estonian'), | |
('eu', 'Basque'), | |
('fa', 'Persian'), | |
('fi', 'Finnish'), | |
('fr', 'French'), | |
('fy', 'Frisian'), | |
('ga', 'Irish'), | |
('gl', 'Galician'), | |
('he', 'Hebrew'), | |
('hi', 'Hindi'), | |
('hr', 'Croatian'), | |
('hu', 'Hungarian'), | |
('ia', 'Interlingua'), | |
('id', 'Indonesian'), | |
('io', 'Ido'), | |
('is', 'Icelandic'), | |
('it', 'Italian'), | |
('ja', 'Japanese'), | |
('ka', 'Georgian'), | |
LANGUAGES ('kk', 'Kazakh'), | |
('km', 'Khmer'), | |
('kn', 'Kannada'), | |
('ko', 'Korean'), | |
('lb', 'Luxembourgish'), | |
('lt', 'Lithuanian'), | |
('lv', 'Latvian'), | |
('mk', 'Macedonian'), | |
('ml', 'Malayalam'), | |
('mn', 'Mongolian'), | |
('mr', 'Marathi'), | |
('my', 'Burmese'), | |
('nb', 'Norwegian Bokmal'), | |
('ne', 'Nepali'), | |
('nl', 'Dutch'), | |
('nn', 'Norwegian Nynorsk'), | |
('os', 'Ossetic'), | |
('pa', 'Punjabi'), | |
('pl', 'Polish'), | |
('pt', 'Portuguese'), | |
('pt-br', 'Brazilian Portuguese'), | |
('ro', 'Romanian'), | |
('ru', 'Russian'), | |
('sk', 'Slovak'), | |
('sl', 'Slovenian'), | |
('sq', 'Albanian'), | |
('sr', 'Serbian'), | |
('sr-latn', 'Serbian Latin'), | |
('sv', 'Swedish'), | |
('sw', 'Swahili'), | |
('ta', 'Tamil'), | |
('te', 'Telugu'), | |
('th', 'Thai'), | |
('tr', 'Turkish'), | |
('tt', 'Tatar'), | |
('udm', 'Udmurt'), | |
('uk', 'Ukrainian'), | |
('ur', 'Urdu'), | |
('vi', 'Vietnamese'), | |
('zh-cn', 'Simplified Chinese'), | |
('zh-hans', 'Simplified Chinese'), | |
('zh-hant', 'Traditional Chinese'), | |
('zh-tw', 'Traditional Chinese')) | |
CORS_ORIGIN_ALLOW_ALL True | |
SESSION_COOKIE_NAME 'sessionid' | |
TEMPLATE_DIRS () | |
SESSION_COOKIE_SECURE False | |
TEMPLATE_STRING_IF_INVALID '' | |
DEBUG True | |
EMAIL_PORT 25 | |
SHORT_DATE_FORMAT 'm/d/Y' | |
CSRF_COOKIE_HTTPONLY False | |
SHORT_DATETIME_FORMAT 'm/d/Y P' | |
TEMPLATE_DEBUG True | |
LOGIN_REDIRECT_URL '/accounts/profile/' | |
MIGRATION_MODULES {} | |
PREPEND_WWW False | |
MEDIA_URL '' | |
STATICFILES_STORAGE 'django.contrib.staticfiles.storage.StaticFilesStorage' | |
DEBUG_PROPAGATE_EXCEPTIONS False | |
LOGGING {} | |
DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter' | |
CSRF_COOKIE_DOMAIN None | |
('django.template.loaders.filesystem.Loader', | |
TEMPLATE_LOADERS 'django.template.loaders.app_directories.Loader') | |
FILE_UPLOAD_TEMP_DIR None | |
FORCE_SCRIPT_NAME None | |
ABSOLUTE_URL_OVERRIDES {} | |
EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend' | |
{'default': {'ATOMIC_REQUESTS': False, | |
'AUTOCOMMIT': True, | |
'CONN_MAX_AGE': 0, | |
'ENGINE': 'django.db.backends.sqlite3', | |
'HOST': '', | |
'NAME': '/home/arjen/repositories/x/y/backend/staging/api/src/db.sqlite3', | |
'OPTIONS': {}, | |
DATABASES 'PASSWORD': '********************', | |
'PORT': '', | |
'TEST': {'CHARSET': None, | |
'COLLATION': None, | |
'MIRROR': None, | |
'NAME': None}, | |
'TIME_ZONE': 'UTC', | |
'USER': ''}} | |
LANGUAGE_COOKIE_DOMAIN None | |
DATETIME_FORMAT 'N j, Y, P' | |
BASE_DIR '/home/arjen/repositories/x/y/backend/staging/api/src' | |
SECURE_PROXY_SSL_HEADER None | |
TEST_NON_SERIALIZED_APPS [] | |
('django.core.files.uploadhandler.MemoryFileUploadHandler', | |
FILE_UPLOAD_HANDLERS 'django.core.files.uploadhandler.TemporaryFileUploadHandler') | |
SERVER_EMAIL 'root@localhost' | |
LANGUAGE_COOKIE_PATH '/' | |
PROFANITIES_LIST '********************' | |
TIME_INPUT_FORMATS ('%H:%M:%S', '%H:%M:%S.%f', '%H:%M') | |
SESSION_FILE_PATH None | |
('%Y-%m-%d', | |
'%m/%d/%Y', | |
'%m/%d/%y', | |
'%b %d %Y', | |
'%b %d, %Y', | |
DATE_INPUT_FORMATS '%d %b %Y', | |
'%d %b, %Y', | |
'%B %d %Y', | |
'%B %d, %Y', | |
'%d %B %Y', | |
'%d %B, %Y') | |
CACHES {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} | |
X_FRAME_OPTIONS 'SAMEORIGIN' | |
LANGUAGE_CODE 'en-us' | |
INTERNAL_IPS () | |
EMAIL_HOST_PASSWORD '********************' | |
SESSION_ENGINE 'django.contrib.sessions.backends.db' | |
FORMAT_MODULE_PATH None | |
EMAIL_SUBJECT_PREFIX '[Django] ' | |
SESSION_COOKIE_HTTPONLY True | |
DEFAULT_TABLESPACE '' | |
LANGUAGES_BIDI ('he', 'ar', 'fa', 'ur') | |
CSRF_COOKIE_AGE 31449600 | |
CSRF_FAILURE_VIEW 'django.views.csrf.csrf_failure' | |
('django.contrib.sessions.middleware.SessionMiddleware', | |
'corsheaders.middleware.CorsMiddleware', | |
'django.middleware.common.CommonMiddleware', | |
'django.middleware.csrf.CsrfViewMiddleware', | |
MIDDLEWARE_CLASSES 'django.contrib.auth.middleware.AuthenticationMiddleware', | |
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | |
'django.contrib.messages.middleware.MessageMiddleware', | |
'django.middleware.clickjacking.XFrameOptionsMiddleware') | |
DEFAULT_FROM_EMAIL 'webmaster@localhost' | |
DATE_FORMAT 'N j, Y' | |
SESSION_SERIALIZER 'django.contrib.sessions.serializers.JSONSerializer' | |
MANAGERS () | |
CACHE_MIDDLEWARE_KEY_PREFIX '********************' | |
EMAIL_USE_SSL False | |
USE_THOUSAND_SEPARATOR False | |
IGNORABLE_404_URLS () | |
FILE_UPLOAD_PERMISSIONS None | |
LANGUAGE_COOKIE_NAME 'django_language' | |
SILENCED_SYSTEM_CHECKS [] | |
MEDIA_ROOT '' | |
AUTHENTICATION_BACKENDS ('django.contrib.auth.backends.ModelBackend',) | |
DATABASE_ROUTERS [] | |
('django.contrib.auth.context_processors.auth', | |
'django.core.context_processors.debug', | |
'django.core.context_processors.i18n', | |
TEMPLATE_CONTEXT_PROCESSORS 'django.core.context_processors.media', | |
'django.core.context_processors.static', | |
'django.core.context_processors.tz', | |
'django.contrib.messages.context_processors.messages') | |
TIME_FORMAT 'P' | |
STATICFILES_DIRS () | |
FIRST_DAY_OF_WEEK 0 | |
LANGUAGE_COOKIE_AGE None | |
CSRF_COOKIE_SECURE False | |
You're seeing this error because you have DEBUG = True in your Django settings | |
file. Change that to False, and Django will display a standard 500 page. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment