summaryrefslogtreecommitdiff
path: root/django/views
diff options
context:
space:
mode:
authorBen Lomax <lomax.on.the.run@gmail.com>2023-07-08 21:54:37 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-07-10 11:43:36 +0200
commitb7a17b0ea0a2061bae752a3a2292007d41825814 (patch)
treeea2607dfea49472007ee2318684e497dc91a71f1 /django/views
parentfb1c7635065321d415ad8182caf986a824bf9650 (diff)
Refs #31949 -- Made @vary_on_(cookie/headers) decorators work with async functions.
Diffstat (limited to 'django/views')
-rw-r--r--django/views/decorators/vary.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/django/views/decorators/vary.py b/django/views/decorators/vary.py
index b1459295d2..9beab8b4db 100644
--- a/django/views/decorators/vary.py
+++ b/django/views/decorators/vary.py
@@ -1,5 +1,7 @@
from functools import wraps
+from asgiref.sync import iscoroutinefunction
+
from django.utils.cache import patch_vary_headers
@@ -16,13 +18,21 @@ def vary_on_headers(*headers):
"""
def decorator(func):
- @wraps(func)
- def inner_func(*args, **kwargs):
- response = func(*args, **kwargs)
- patch_vary_headers(response, headers)
- return response
+ if iscoroutinefunction(func):
+
+ async def _view_wrapper(request, *args, **kwargs):
+ response = await func(request, *args, **kwargs)
+ patch_vary_headers(response, headers)
+ return response
+
+ else:
+
+ def _view_wrapper(request, *args, **kwargs):
+ response = func(request, *args, **kwargs)
+ patch_vary_headers(response, headers)
+ return response
- return inner_func
+ return wraps(func)(_view_wrapper)
return decorator