Skip to content

Commit 543dbad

Browse files
Remove base request serializer
1 parent 53b2423 commit 543dbad

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

api/api/serializers/base.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import typing
2-
31
from rest_framework import serializers
4-
from rest_framework.request import Request
52

63

74
class BaseModelSerializer(serializers.ModelSerializer):
@@ -22,14 +19,3 @@ def build_property_field(self, field_name, model_class):
2219
if doc := getattr(model_class, field_name).__doc__:
2320
kwargs.setdefault("help_text", doc)
2421
return klass, kwargs
25-
26-
27-
class BaseRequestSerializer(serializers.Serializer):
28-
class Context(typing.TypedDict):
29-
request: typing.Required[Request]
30-
31-
context: Context
32-
33-
@property
34-
def request(self) -> Request | None:
35-
return self.context.get("request", None)

api/api/serializers/media_serializers.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from collections import namedtuple
22
from math import floor
3+
from typing import TypedDict
34

45
from django.conf import settings
56
from django.core.exceptions import ValidationError as DjangoValidationError
67
from django.core.validators import MaxValueValidator
78
from django.urls import reverse
89
from rest_framework import serializers
910
from rest_framework.exceptions import NotAuthenticated, ValidationError
11+
from rest_framework.request import Request
1012

1113
from drf_spectacular.utils import extend_schema_serializer
1214
from elasticsearch_dsl.response import Hit
@@ -20,7 +22,7 @@
2022
from api.constants.sorting import DESCENDING, RELEVANCE, SORT_DIRECTIONS, SORT_FIELDS
2123
from api.controllers import search_controller
2224
from api.models.media import AbstractMedia
23-
from api.serializers.base import BaseModelSerializer, BaseRequestSerializer
25+
from api.serializers.base import BaseModelSerializer
2426
from api.serializers.docs import (
2527
COLLECTION_HELP_TEXT,
2628
CREATOR_HELP_TEXT,
@@ -39,7 +41,7 @@
3941
#######################
4042

4143

42-
class PaginatedRequestSerializer(BaseRequestSerializer):
44+
class PaginatedRequestSerializer(serializers.Serializer):
4345
"""This serializer passes pagination parameters from the query string."""
4446

4547
_SUBJECT_TO_PAGINATION_LIMITS = (
@@ -68,7 +70,9 @@ class PaginatedRequestSerializer(BaseRequestSerializer):
6870
)
6971

7072
def validate_page_size(self, value):
71-
level, max_value = privilege.PAGE_SIZE.request_level(self.request)
73+
level, max_value = privilege.PAGE_SIZE.request_level(
74+
self.context.get("request")
75+
)
7276

7377
validator = MaxValueValidator(
7478
max_value,
@@ -91,15 +95,19 @@ def validate_page_size(self, value):
9195
return value
9296

9397
def clamp_result_count(self, real_result_count):
94-
_, max_depth = privilege.PAGINATION_DEPTH.request_level(self.request)
98+
_, max_depth = privilege.PAGINATION_DEPTH.request_level(
99+
self.context.get("request")
100+
)
95101

96102
if real_result_count > max_depth:
97103
return max_depth
98104

99105
return real_result_count
100106

101107
def clamp_page_count(self, real_page_count):
102-
_, max_depth = privilege.PAGINATION_DEPTH.request_level(self.request)
108+
_, max_depth = privilege.PAGINATION_DEPTH.request_level(
109+
self.context.get("request")
110+
)
103111

104112
page_size = self.data["page_size"]
105113
max_possible_page_count = max_depth / page_size
@@ -114,7 +122,9 @@ def validate(self, data):
114122

115123
# pagination depth is validated as a combination of page and page size,
116124
# and so cannot be validated in the individual field validation methods
117-
level, max_depth = privilege.PAGINATION_DEPTH.request_level(self.request)
125+
level, max_depth = privilege.PAGINATION_DEPTH.request_level(
126+
self.context.get("request")
127+
)
118128

119129
requested_pagination_depth = data["page"] * data["page_size"]
120130

@@ -318,9 +328,10 @@ class MediaSearchRequestSerializer(PaginatedRequestSerializer):
318328
required=False,
319329
)
320330

321-
class Context(BaseRequestSerializer.Context, total=True):
331+
class Context(TypedDict, total=True):
322332
warnings: list[dict]
323333
media_type: MediaType
334+
request: Request
324335

325336
context: Context
326337

@@ -443,7 +454,7 @@ def validate_source(self, value):
443454
f"Refer to the source list for valid options: {sources_list}."
444455
)
445456
elif invalid_sources := (sources - valid_sources):
446-
available_sources_uri = self.request.build_absolute_uri(
457+
available_sources_uri = self.context.get("request").build_absolute_uri(
447458
reverse(f"{self.media_type}-stats")
448459
)
449460
self.context["warnings"].append(

0 commit comments

Comments
 (0)