Skip to content

Commit 097302e

Browse files
committed
Add missing decorator: metadata_class
1 parent e0c2e6f commit 097302e

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

rest_framework/decorators.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ def handler(self, *args, **kwargs):
7070
WrappedAPIView.permission_classes = getattr(func, 'permission_classes',
7171
APIView.permission_classes)
7272

73+
WrappedAPIView.metadata_class = getattr(func, 'metadata_class',
74+
APIView.metadata_class)
75+
7376
WrappedAPIView.versioning_class = getattr(func, "versioning_class",
7477
APIView.versioning_class)
7578

@@ -116,6 +119,13 @@ def decorator(func):
116119
return decorator
117120

118121

122+
def metadata_class(metadata_class):
123+
def decorator(func):
124+
func.metadata_class = metadata_class
125+
return func
126+
return decorator
127+
128+
119129
def versioning_class(versioning_class):
120130
def decorator(func):
121131
func.versioning_class = versioning_class

tests/test_decorators.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from rest_framework import status
77
from rest_framework.authentication import BasicAuthentication
88
from rest_framework.decorators import (
9-
action, api_view, authentication_classes, parser_classes,
9+
action, api_view, authentication_classes, metadata_class, parser_classes,
1010
permission_classes, renderer_classes, schema, throttle_classes,
1111
versioning_class
1212
)
@@ -162,6 +162,18 @@ def view(request):
162162
response = view(request)
163163
assert response.data == {"version": "1.2.3"}
164164

165+
def test_metadata_class(self):
166+
# From TestMetadata.test_none_metadata()
167+
@api_view()
168+
@metadata_class(None)
169+
def view(request):
170+
return Response({})
171+
172+
request = self.factory.options('/')
173+
response = view(request)
174+
assert response.status_code == status.HTTP_405_METHOD_NOT_ALLOWED
175+
assert response.data == {'detail': 'Method "OPTIONS" not allowed.'}
176+
165177
def test_schema(self):
166178
"""
167179
Checks CustomSchema class is set on view

0 commit comments

Comments
 (0)