@@ -533,7 +533,8 @@ def _wrapped_view_func(
533
533
request : HttpRequest , / , * args : ParamT .args , ** kwargs : ParamT .kwargs
534
534
) -> HttpResponse :
535
535
process_client (request , request .user , is_browser_view = True , query = view_func .__name__ )
536
- return rate_limit ()(view_func )(request , * args , ** kwargs )
536
+ rate_limit (request )
537
+ return view_func (request , * args , ** kwargs )
537
538
538
539
return _wrapped_view_func
539
540
@@ -724,10 +725,8 @@ def _wrapped_func_arguments(
724
725
) -> HttpResponse :
725
726
user_profile = validate_api_key (request , None , api_key , False )
726
727
if not skip_rate_limiting :
727
- limited_func = rate_limit ()(view_func )
728
- else :
729
- limited_func = view_func
730
- return limited_func (request , user_profile , * args , ** kwargs )
728
+ rate_limit (request )
729
+ return view_func (request , user_profile , * args , ** kwargs )
731
730
732
731
return _wrapped_func_arguments
733
732
@@ -788,10 +787,8 @@ def _wrapped_func_arguments(
788
787
try :
789
788
if not skip_rate_limiting :
790
789
# Apply rate limiting
791
- target_view_func = rate_limit ()(view_func )
792
- else :
793
- target_view_func = view_func
794
- return target_view_func (request , profile , * args , ** kwargs )
790
+ rate_limit (request )
791
+ return view_func (request , profile , * args , ** kwargs )
795
792
except Exception as err :
796
793
if not webhook_client_name :
797
794
raise err
@@ -865,9 +862,7 @@ def authenticate_log_and_execute_json(
865
862
** kwargs : object ,
866
863
) -> HttpResponse :
867
864
if not skip_rate_limiting :
868
- limited_view_func = rate_limit ()(view_func )
869
- else :
870
- limited_view_func = view_func
865
+ rate_limit (request )
871
866
872
867
if not request .user .is_authenticated :
873
868
if not allow_unauthenticated :
@@ -878,7 +873,7 @@ def authenticate_log_and_execute_json(
878
873
is_browser_view = True ,
879
874
query = view_func .__name__ ,
880
875
)
881
- return limited_view_func (request , request .user , * args , ** kwargs )
876
+ return view_func (request , request .user , * args , ** kwargs )
882
877
883
878
user_profile = request .user
884
879
validate_account_and_subdomain (request , user_profile )
@@ -887,7 +882,7 @@ def authenticate_log_and_execute_json(
887
882
raise JsonableError (_ ("Webhook bots can only access webhooks" ))
888
883
889
884
process_client (request , user_profile , is_browser_view = True , query = view_func .__name__ )
890
- return limited_view_func (request , user_profile , * args , ** kwargs )
885
+ return view_func (request , user_profile , * args , ** kwargs )
891
886
892
887
893
888
# Checks if the user is logged in. If not, return an error (the
@@ -1072,39 +1067,23 @@ def rate_limit_remote_server(
1072
1067
raise e
1073
1068
1074
1069
1075
- def rate_limit () -> Callable [[ViewFuncT ], ViewFuncT ]:
1076
- """Rate-limits a view. Returns a decorator"""
1077
-
1078
- def wrapper (func : ViewFuncT ) -> ViewFuncT :
1079
- @wraps (func )
1080
- def wrapped_func (request : HttpRequest , * args : object , ** kwargs : object ) -> HttpResponse :
1081
-
1082
- # It is really tempting to not even wrap our original function
1083
- # when settings.RATE_LIMITING is False, but it would make
1084
- # for awkward unit testing in some situations.
1085
- if not settings .RATE_LIMITING :
1086
- return func (request , * args , ** kwargs )
1087
-
1088
- if client_is_exempt_from_rate_limiting (request ):
1089
- return func (request , * args , ** kwargs )
1090
-
1091
- user = request .user
1092
- remote_server = RequestNotes .get_notes (request ).remote_server
1093
-
1094
- if settings .ZILENCER_ENABLED and remote_server is not None :
1095
- rate_limit_remote_server (request , remote_server , domain = "api_by_remote_server" )
1096
- elif not user .is_authenticated :
1097
- rate_limit_request_by_ip (request , domain = "api_by_ip" )
1098
- return func (request , * args , ** kwargs )
1099
- else :
1100
- assert isinstance (user , UserProfile )
1101
- rate_limit_user (request , user , domain = "api_by_user" )
1070
+ def rate_limit (request : HttpRequest ) -> None :
1071
+ if not settings .RATE_LIMITING :
1072
+ return
1102
1073
1103
- return func (request , * args , ** kwargs )
1074
+ if client_is_exempt_from_rate_limiting (request ):
1075
+ return
1104
1076
1105
- return cast (ViewFuncT , wrapped_func ) # https://github.com/python/mypy/issues/1927
1077
+ user = request .user
1078
+ remote_server = RequestNotes .get_notes (request ).remote_server
1106
1079
1107
- return wrapper
1080
+ if settings .ZILENCER_ENABLED and remote_server is not None :
1081
+ rate_limit_remote_server (request , remote_server , domain = "api_by_remote_server" )
1082
+ elif not user .is_authenticated :
1083
+ rate_limit_request_by_ip (request , domain = "api_by_ip" )
1084
+ else :
1085
+ assert isinstance (user , UserProfile )
1086
+ rate_limit_user (request , user , domain = "api_by_user" )
1108
1087
1109
1088
1110
1089
def return_success_on_head_request (
0 commit comments