Add missing decorator: metadata_class

This commit is contained in:
qqii 2025-08-05 18:41:15 +01:00
parent e0c2e6fdc2
commit 097302e929
No known key found for this signature in database
2 changed files with 23 additions and 1 deletions

View File

@ -70,6 +70,9 @@ def api_view(http_method_names=None):
WrappedAPIView.permission_classes = getattr(func, 'permission_classes',
APIView.permission_classes)
WrappedAPIView.metadata_class = getattr(func, 'metadata_class',
APIView.metadata_class)
WrappedAPIView.versioning_class = getattr(func, "versioning_class",
APIView.versioning_class)
@ -116,6 +119,13 @@ def permission_classes(permission_classes):
return decorator
def metadata_class(metadata_class):
def decorator(func):
func.metadata_class = metadata_class
return func
return decorator
def versioning_class(versioning_class):
def decorator(func):
func.versioning_class = versioning_class

View File

@ -6,7 +6,7 @@ from django.test import TestCase
from rest_framework import status
from rest_framework.authentication import BasicAuthentication
from rest_framework.decorators import (
action, api_view, authentication_classes, parser_classes,
action, api_view, authentication_classes, metadata_class, parser_classes,
permission_classes, renderer_classes, schema, throttle_classes,
versioning_class
)
@ -162,6 +162,18 @@ class DecoratorTestCase(TestCase):
response = view(request)
assert response.data == {"version": "1.2.3"}
def test_metadata_class(self):
# From TestMetadata.test_none_metadata()
@api_view()
@metadata_class(None)
def view(request):
return Response({})
request = self.factory.options('/')
response = view(request)
assert response.status_code == status.HTTP_405_METHOD_NOT_ALLOWED
assert response.data == {'detail': 'Method "OPTIONS" not allowed.'}
def test_schema(self):
"""
Checks CustomSchema class is set on view