diff options
author | Jon Janzen <jon@jonjanzen.com> | 2023-03-22 02:21:04 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-22 10:21:04 +0100 |
commit | 23cbed21876bf02f4600c0dac3a5277db5b2afbb (patch) | |
tree | d0046e9b5930842d4b647129b479c5fd0d7c2677 /django | |
parent | 6087bc4e15e89d968396807f8485f4b5624c4f03 (diff) | |
download | django-23cbed21876bf02f4600c0dac3a5277db5b2afbb.tar.gz |
Refs #31949 -- Enabled @sensitive_variables to work with async functions.
Diffstat (limited to 'django')
-rw-r--r-- | django/views/decorators/debug.py | 72 |
1 files changed, 52 insertions, 20 deletions
diff --git a/django/views/decorators/debug.py b/django/views/decorators/debug.py index 5578a4995f..3f68d4a7e5 100644 --- a/django/views/decorators/debug.py +++ b/django/views/decorators/debug.py @@ -1,5 +1,7 @@ from functools import wraps +from asgiref.sync import iscoroutinefunction + from django.http import HttpRequest @@ -33,13 +35,25 @@ def sensitive_variables(*variables): ) def decorator(func): - @wraps(func) - def sensitive_variables_wrapper(*func_args, **func_kwargs): - if variables: - sensitive_variables_wrapper.sensitive_variables = variables - else: - sensitive_variables_wrapper.sensitive_variables = "__ALL__" - return func(*func_args, **func_kwargs) + if iscoroutinefunction(func): + + @wraps(func) + async def sensitive_variables_wrapper(*func_args, **func_kwargs): + if variables: + sensitive_variables_wrapper.sensitive_variables = variables + else: + sensitive_variables_wrapper.sensitive_variables = "__ALL__" + return await func(*func_args, **func_kwargs) + + else: + + @wraps(func) + def sensitive_variables_wrapper(*func_args, **func_kwargs): + if variables: + sensitive_variables_wrapper.sensitive_variables = variables + else: + sensitive_variables_wrapper.sensitive_variables = "__ALL__" + return func(*func_args, **func_kwargs) return sensitive_variables_wrapper @@ -77,19 +91,37 @@ def sensitive_post_parameters(*parameters): ) def decorator(view): - @wraps(view) - def sensitive_post_parameters_wrapper(request, *args, **kwargs): - if not isinstance(request, HttpRequest): - raise TypeError( - "sensitive_post_parameters didn't receive an HttpRequest " - "object. If you are decorating a classmethod, make sure " - "to use @method_decorator." - ) - if parameters: - request.sensitive_post_parameters = parameters - else: - request.sensitive_post_parameters = "__ALL__" - return view(request, *args, **kwargs) + if iscoroutinefunction(view): + + @wraps(view) + async def sensitive_post_parameters_wrapper(request, *args, **kwargs): + if not isinstance(request, HttpRequest): + raise TypeError( + "sensitive_post_parameters didn't receive an HttpRequest " + "object. If you are decorating a classmethod, make sure " + "to use @method_decorator." + ) + if parameters: + request.sensitive_post_parameters = parameters + else: + request.sensitive_post_parameters = "__ALL__" + return await view(request, *args, **kwargs) + + else: + + @wraps(view) + def sensitive_post_parameters_wrapper(request, *args, **kwargs): + if not isinstance(request, HttpRequest): + raise TypeError( + "sensitive_post_parameters didn't receive an HttpRequest " + "object. If you are decorating a classmethod, make sure " + "to use @method_decorator." + ) + if parameters: + request.sensitive_post_parameters = parameters + else: + request.sensitive_post_parameters = "__ALL__" + return view(request, *args, **kwargs) return sensitive_post_parameters_wrapper |