-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Closed
Description
Checklist
- I have verified that that issue exists against the
master
branch of Django REST framework. - I have searched for similar issues in both open and closed tickets and cannot find a duplicate.
- This is not a usage question. (Those should be directed to the discussion group instead.)
- This cannot be dealt with as a third party library. (We prefer new functionality to be in the form of third party libraries where possible.)
- I have reduced the issue to the simplest possible case.
- I have included a failing test as a pull request. (If you are unable to do so we can still accept the issue.)
Steps to reproduce
Create an APIView with HEAD
allowed:
class HeadAPIView(APIView):
permission_classes = (AllowAny,)
allowed_methods = ('POST', 'OPTIONS', 'HEAD')
And then use django-rest-swagger
to browse API docs.
Expected behavior
Just work.
Actual behavior
["KeyError: 'head'", ' File "django/core/handlers/base.py", line 149, in get_response', ' File "django/core/handlers/base.py", line 147, in get_response', ' File "django/views/decorators/csrf.py", line 58, in wrapped_view', ' File "django/views/generic/base.py", line 68, in view', ' File "rest_framework/views.py", line 466, in dispatch', ' File "rest_framework/views.py", line 463, in dispatch', ' File "rest_framework/decorators.py", line 52, in handler', ' File "project/urls.py", line 32, in schema_view', ' File "rest_framework/schemas.py", line 78, in __init__', ' File "rest_framework/schemas.py", line 132, in get_api_endpoints', ' File "rest_framework/schemas.py", line 124, in get_api_endpoints', ' File "rest_framework/schemas.py", line 185, in get_key']
This is because schemas.py
does not handle unexpected key (method
) that is not defined in mapping dict (only GET
, POST
, PUT
, PATCH
and DELETE
are there):
default_mapping = {
'get': 'read',
'post': 'create',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy',
}
actions = getattr(callback, 'actions', self.default_mapping)
action = actions[method.lower()]
Generally speaking, schemas.py
cannot deal with unexpected method such as HEAD
, and invalid method such as INVALID
.
Metadata
Metadata
Assignees
Labels
No labels