#35133: never_cache decorator problem with async get function inside classbased
View
-------------------------------------+-------------------------------------
               Reporter:             |          Owner:  nobody
  unnamedtrue                        |
                   Type:  Bug        |         Status:  new
              Component:  Core       |        Version:  5.0
  (Cache system)                     |       Keywords:  never_cache,
               Severity:  Normal     |  decorator, async, classnased view,
           Triage Stage:             |  dispatch, coroutine
  Unreviewed                         |      Has patch:  0
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 If I use never_cache decorator for my classbased View I get this error:
 "'coroutine' object has no attribute 'has_header'"
 Code is:
 {{{
 @method_decorator(never_cache, name="dispatch")
 class CheckAsync(View):
     async def get(self, request, *args, **kwargs):
         # Perform io-blocking view logic using await, sleep for example.
         await asyncio.sleep(1)
         return HttpResponse("Hello async world!")
 }}}
 Debug info:
 {{{
 Request Method: GET
 Request URL: http://127.0.0.1:8000/api/asynccheck/

 Django Version: 5.0.1
 Python Version: 3.12.1
 Installed Applications:
 ['core.apps.AdminConfig',
  'django.contrib.sites',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'api.apps.ApiAppConfig',
 ]
 Installed Middleware:
 ['django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'django.contrib.sites.middleware.CurrentSiteMiddleware',
  'django.middleware.http.ConditionalGetMiddleware',
  'django.middleware.gzip.GZipMiddleware']

 Traceback (most recent call last):
   File "/Users/me/p/lib/python3.12/site-
 packages/django/core/handlers/exception.py", line 55, in inner
     response = get_response(request)
                ^^^^^^^^^^^^^^^^^^^^^
   File "/Users/me/p/lib/python3.12/site-
 packages/django/core/handlers/base.py", line 197, in _get_response
     response = wrapped_callback(request, *callback_args,
 **callback_kwargs)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File
 
"/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py",
 line 449, in result
     return self.__get_result()
            ^^^^^^^^^^^^^^^^^^^
   File
 
"/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py",
 line 401, in __get_result
     raise self._exception
     ^^^^^^^^^^^^^^^^^^^^^
   File "/Users/me/p/lib/python3.12/site-
 packages/django/views/generic/base.py", line 104, in view
     return self.dispatch(request, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/Users/me/p/lib/python3.12/site-
 packages/django/utils/decorators.py", line 48, in _wrapper
     return bound_method(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/Users/me/p/lib/python3.12/site-
 packages/django/views/decorators/cache.py", line 81, in _view_wrapper
     add_never_cache_headers(response)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/Users/me/p/lib/python3.12/site-packages/django/utils/cache.py",
 line 292, in add_never_cache_headers
     patch_response_headers(response, cache_timeout=-1)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/Users/me/p/lib/python3.12/site-packages/django/utils/cache.py",
 line 283, in patch_response_headers
     if not response.has_header("Expires"):
            ^^^^^^^^^^^^^^^^^^^

 Exception Type: AttributeError at /api/asynccheck/
 Exception Value: 'coroutine' object has no attribute 'has_header'
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/35133>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018d2962f046-51107443-b5e5-4b95-ad3b-f8663db18ee4-000000%40eu-central-1.amazonses.com.

Reply via email to