♻️(backend) extract throttling classes into a module

Extract throttling classes into a dedicated Python module, following the
structure of suitenumerique/docs.

This is a preparatory refactor to ease upcoming changes to the throttling
implementation. No functional behavior change is introduced in this commit.
This commit is contained in:
lebaudantoine
2026-02-09 14:44:39 +01:00
committed by aleb_the_flash
parent 3887255e9c
commit 23de7e52bc
2 changed files with 18 additions and 16 deletions

View File

@@ -0,0 +1,14 @@
"""Throttling modules for the API."""
from rest_framework import throttling
class RequestEntryAnonRateThrottle(throttling.AnonRateThrottle):
"""Throttle Anonymous user requesting room entry"""
scope = "request_entry"
class CreationCallbackAnonRateThrottle(throttling.AnonRateThrottle):
"""Throttle Anonymous user requesting room generation callback"""
scope = "creation_callback"

View File

@@ -10,7 +10,7 @@ from django.http import Http404
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.utils.text import slugify from django.utils.text import slugify
from rest_framework import decorators, mixins, pagination, throttling, viewsets from rest_framework import decorators, mixins, pagination, viewsets
from rest_framework import ( from rest_framework import (
exceptions as drf_exceptions, exceptions as drf_exceptions,
) )
@@ -58,7 +58,7 @@ from core.services.room_creation import RoomCreation
from core.services.subtitle import SubtitleException, SubtitleService from core.services.subtitle import SubtitleException, SubtitleService
from ..authentication.livekit import LiveKitTokenAuthentication from ..authentication.livekit import LiveKitTokenAuthentication
from . import permissions, serializers from . import permissions, serializers, throttling
from .feature_flag import FeatureFlag from .feature_flag import FeatureFlag
# pylint: disable=too-many-ancestors # pylint: disable=too-many-ancestors
@@ -191,18 +191,6 @@ class UserViewSet(
) )
class RequestEntryAnonRateThrottle(throttling.AnonRateThrottle):
"""Throttle Anonymous user requesting room entry"""
scope = "request_entry"
class CreationCallbackAnonRateThrottle(throttling.AnonRateThrottle):
"""Throttle Anonymous user requesting room generation callback"""
scope = "creation_callback"
class RoomViewSet( class RoomViewSet(
mixins.CreateModelMixin, mixins.CreateModelMixin,
mixins.DestroyModelMixin, mixins.DestroyModelMixin,
@@ -379,7 +367,7 @@ class RoomViewSet(
methods=["post"], methods=["post"],
url_path="request-entry", url_path="request-entry",
permission_classes=[], permission_classes=[],
throttle_classes=[RequestEntryAnonRateThrottle], throttle_classes=[throttling.RequestEntryAnonRateThrottle],
) )
def request_entry(self, request, pk=None): # pylint: disable=unused-argument def request_entry(self, request, pk=None): # pylint: disable=unused-argument
"""Request entry to a room""" """Request entry to a room"""
@@ -489,7 +477,7 @@ class RoomViewSet(
methods=["post"], methods=["post"],
url_path="creation-callback", url_path="creation-callback",
permission_classes=[], permission_classes=[],
throttle_classes=[CreationCallbackAnonRateThrottle], throttle_classes=[throttling.CreationCallbackAnonRateThrottle],
) )
def creation_callback(self, request): def creation_callback(self, request):
"""Retrieve cached room data via an unauthenticated request with a unique ID. """Retrieve cached room data via an unauthenticated request with a unique ID.