diff --git a/rest_framework/decorators.py b/rest_framework/decorators.py index 864ff73958..d84525585a 100644 --- a/rest_framework/decorators.py +++ b/rest_framework/decorators.py @@ -70,6 +70,9 @@ def handler(self, *args, **kwargs): WrappedAPIView.permission_classes = getattr(func, 'permission_classes', APIView.permission_classes) + WrappedAPIView.versioning_class = getattr(func, "versioning_class", + APIView.versioning_class) + WrappedAPIView.schema = getattr(func, 'schema', APIView.schema) @@ -113,6 +116,13 @@ def decorator(func): return decorator +def versioning_class(versioning_class): + def decorator(func): + func.versioning_class = versioning_class + return func + return decorator + + def schema(view_inspector): def decorator(func): func.schema = view_inspector diff --git a/tests/test_decorators.py b/tests/test_decorators.py index 8d0805cbba..9cc6c41e3e 100644 --- a/tests/test_decorators.py +++ b/tests/test_decorators.py @@ -7,7 +7,8 @@ from rest_framework.authentication import BasicAuthentication from rest_framework.decorators import ( action, api_view, authentication_classes, parser_classes, - permission_classes, renderer_classes, schema, throttle_classes + permission_classes, renderer_classes, schema, throttle_classes, + versioning_class ) from rest_framework.parsers import JSONParser from rest_framework.permissions import IsAuthenticated @@ -16,6 +17,7 @@ from rest_framework.schemas import AutoSchema from rest_framework.test import APIRequestFactory from rest_framework.throttling import UserRateThrottle +from rest_framework.versioning import QueryParameterVersioning from rest_framework.views import APIView @@ -150,6 +152,16 @@ def view(request): response = view(request) assert response.status_code == status.HTTP_429_TOO_MANY_REQUESTS + def test_versioning_class(self): + @api_view(["GET"]) + @versioning_class(QueryParameterVersioning) + def view(request): + return Response({"version": request.version}) + + request = self.factory.get("/?version=1.2.3") + response = view(request) + assert response.data == {"version": "1.2.3"} + def test_schema(self): """ Checks CustomSchema class is set on view
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: