summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/utils/deprecation.py10
-rw-r--r--tests/deprecation/test_middleware_mixin.py27
2 files changed, 37 insertions, 0 deletions
diff --git a/django/utils/deprecation.py b/django/utils/deprecation.py
index 05913ab4ba..08f33fa7d3 100644
--- a/django/utils/deprecation.py
+++ b/django/utils/deprecation.py
@@ -96,6 +96,16 @@ class MiddlewareMixin:
self._async_check()
super().__init__()
+ def __repr__(self):
+ return '<%s get_response=%s>' % (
+ self.__class__.__qualname__,
+ getattr(
+ self.get_response,
+ '__qualname__',
+ self.get_response.__class__.__name__,
+ ),
+ )
+
def _async_check(self):
"""
If get_response is a coroutine function, turns us into async mode so
diff --git a/tests/deprecation/test_middleware_mixin.py b/tests/deprecation/test_middleware_mixin.py
index ecaf4a5f6a..cf9fbda35c 100644
--- a/tests/deprecation/test_middleware_mixin.py
+++ b/tests/deprecation/test_middleware_mixin.py
@@ -54,6 +54,33 @@ class MiddlewareMixinTests(SimpleTestCase):
XViewMiddleware,
]
+ def test_repr(self):
+ class GetResponse:
+ def __call__(self):
+ return HttpResponse()
+
+ def get_response():
+ return HttpResponse()
+
+ self.assertEqual(
+ repr(MiddlewareMixin(GetResponse())),
+ '<MiddlewareMixin get_response=GetResponse>',
+ )
+ self.assertEqual(
+ repr(MiddlewareMixin(get_response)),
+ '<MiddlewareMixin get_response='
+ 'MiddlewareMixinTests.test_repr.<locals>.get_response>',
+ )
+ self.assertEqual(
+ repr(CsrfViewMiddleware(GetResponse())),
+ '<CsrfViewMiddleware get_response=GetResponse>',
+ )
+ self.assertEqual(
+ repr(CsrfViewMiddleware(get_response)),
+ '<CsrfViewMiddleware get_response='
+ 'MiddlewareMixinTests.test_repr.<locals>.get_response>',
+ )
+
def test_passing_explicit_none(self):
msg = 'get_response must be provided.'
for middleware in self.middlewares: