From e0c2e6fdc29814e7181d8d0ed34c7e23ee078852 Mon Sep 17 00:00:00 2001 From: qqii Date: Thu, 5 Jun 2025 18:08:03 +0100 Subject: [PATCH] Add missing decorator: versioning_class --- rest_framework/decorators.py | 10 ++++++++++ tests/test_decorators.py | 14 +++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/rest_framework/decorators.py b/rest_framework/decorators.py index 864ff7395..d84525585 100644 --- a/rest_framework/decorators.py +++ b/rest_framework/decorators.py @@ -70,6 +70,9 @@ def api_view(http_method_names=None): 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 permission_classes(permission_classes): 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 8d0805cbb..9cc6c41e3 100644 --- a/tests/test_decorators.py +++ b/tests/test_decorators.py @@ -7,7 +7,8 @@ from rest_framework import status 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.response import Response 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 @@ class DecoratorTestCase(TestCase): 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