summaryrefslogtreecommitdiff
path: root/tests/middleware_exceptions/middleware.py
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2020-02-12 15:15:00 -0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-03-18 19:59:12 +0100
commitfc0fa72ff4cdbf5861a366e31cb8bbacd44da22d (patch)
treed419ce531586808b0a111664907b859cb6d22862 /tests/middleware_exceptions/middleware.py
parent3f7e4b16bf58f99c71570ba75dc97db8265071be (diff)
Fixed #31224 -- Added support for asynchronous views and middleware.
This implements support for asynchronous views, asynchronous tests, asynchronous middleware, and an asynchronous test client.
Diffstat (limited to 'tests/middleware_exceptions/middleware.py')
-rw-r--r--tests/middleware_exceptions/middleware.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/middleware_exceptions/middleware.py b/tests/middleware_exceptions/middleware.py
index 63502c6902..69c6db57e7 100644
--- a/tests/middleware_exceptions/middleware.py
+++ b/tests/middleware_exceptions/middleware.py
@@ -1,6 +1,9 @@
from django.http import Http404, HttpResponse
from django.template import engines
from django.template.response import TemplateResponse
+from django.utils.decorators import (
+ async_only_middleware, sync_and_async_middleware, sync_only_middleware,
+)
log = []
@@ -18,6 +21,12 @@ class ProcessExceptionMiddleware(BaseMiddleware):
return HttpResponse('Exception caught')
+@async_only_middleware
+class AsyncProcessExceptionMiddleware(BaseMiddleware):
+ async def process_exception(self, request, exception):
+ return HttpResponse('Exception caught')
+
+
class ProcessExceptionLogMiddleware(BaseMiddleware):
def process_exception(self, request, exception):
log.append('process-exception')
@@ -33,6 +42,12 @@ class ProcessViewMiddleware(BaseMiddleware):
return HttpResponse('Processed view %s' % view_func.__name__)
+@async_only_middleware
+class AsyncProcessViewMiddleware(BaseMiddleware):
+ async def process_view(self, request, view_func, view_args, view_kwargs):
+ return HttpResponse('Processed view %s' % view_func.__name__)
+
+
class ProcessViewNoneMiddleware(BaseMiddleware):
def process_view(self, request, view_func, view_args, view_kwargs):
log.append('processed view %s' % view_func.__name__)
@@ -51,6 +66,13 @@ class TemplateResponseMiddleware(BaseMiddleware):
return response
+@async_only_middleware
+class AsyncTemplateResponseMiddleware(BaseMiddleware):
+ async def process_template_response(self, request, response):
+ response.context_data['mw'].append(self.__class__.__name__)
+ return response
+
+
class LogMiddleware(BaseMiddleware):
def __call__(self, request):
response = self.get_response(request)
@@ -63,6 +85,48 @@ class NoTemplateResponseMiddleware(BaseMiddleware):
return None
+@async_only_middleware
+class AsyncNoTemplateResponseMiddleware(BaseMiddleware):
+ async def process_template_response(self, request, response):
+ return None
+
+
class NotFoundMiddleware(BaseMiddleware):
def __call__(self, request):
raise Http404('not found')
+
+
+class TeapotMiddleware(BaseMiddleware):
+ def __call__(self, request):
+ response = self.get_response(request)
+ response.status_code = 418
+ return response
+
+
+@async_only_middleware
+def async_teapot_middleware(get_response):
+ async def middleware(request):
+ response = await get_response(request)
+ response.status_code = 418
+ return response
+
+ return middleware
+
+
+@sync_and_async_middleware
+class SyncAndAsyncMiddleware(BaseMiddleware):
+ pass
+
+
+@sync_only_middleware
+class DecoratedTeapotMiddleware(TeapotMiddleware):
+ pass
+
+
+class NotSyncOrAsyncMiddleware(BaseMiddleware):
+ """Middleware that is deliberately neither sync or async."""
+ sync_capable = False
+ async_capable = False
+
+ def __call__(self, request):
+ return self.get_response(request)