From b805632573a12224713fc504e290b9475ef2073b Mon Sep 17 00:00:00 2001 From: SKairinos Date: Wed, 6 Nov 2024 12:14:07 +0000 Subject: [PATCH] fix: init request --- codeforlife/views/api.py | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/codeforlife/views/api.py b/codeforlife/views/api.py index facbde6..ff14359 100644 --- a/codeforlife/views/api.py +++ b/codeforlife/views/api.py @@ -5,6 +5,7 @@ import typing as t +from django.http import HttpRequest from rest_framework.views import APIView as _APIView from ..request import BaseRequest, Request @@ -27,17 +28,20 @@ class BaseAPIView(_APIView, t.Generic[AnyBaseRequest]): request: AnyBaseRequest request_class: t.Type[AnyBaseRequest] + def _initialize_request(self, request: HttpRequest, **kwargs): + kwargs["request"] = request + kwargs.setdefault("parsers", self.get_parsers()) + kwargs.setdefault("authenticators", self.get_authenticators()) + kwargs.setdefault("negotiator", self.get_content_negotiator()) + kwargs.setdefault("parser_context", self.get_parser_context(request)) + + return self.request_class(**kwargs) + def initialize_request(self, request, *args, **kwargs): # NOTE: Call to super has side effects and is required. super().initialize_request(request, *args, **kwargs) - return self.request_class( - request=request, - parsers=self.get_parsers(), - authenticators=self.get_authenticators(), - negotiator=self.get_content_negotiator(), - parser_context=self.get_parser_context(request), - ) + return self._initialize_request(request) # pylint: disable-next=missing-class-docstring @@ -56,15 +60,6 @@ def get_request_user_class(cls) -> t.Type[RequestUser]: 0 ] - def initialize_request(self, request, *args, **kwargs): - # NOTE: Call to super has side effects and is required. - super().initialize_request(request, *args, **kwargs) - - return self.request_class( - user_class=self.get_request_user_class(), - request=request, - parsers=self.get_parsers(), - authenticators=self.get_authenticators(), - negotiator=self.get_content_negotiator(), - parser_context=self.get_parser_context(request), - ) + def _initialize_request(self, request, **kwargs): + kwargs["user_class"] = self.get_request_user_class() + return super()._initialize_request(request, **kwargs)