From 1f5531ae79feff8cf3f77164891e01be7f895a36 Mon Sep 17 00:00:00 2001 From: Ryan Kaskel Date: Fri, 16 Sep 2016 18:30:01 +0100 Subject: [PATCH] Fix Django 1.0 middleware function compatibility --- debug_toolbar/apps.py | 7 ++++++- tests/middleware.py | 7 +++++++ tests/test_integration.py | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/middleware.py diff --git a/debug_toolbar/apps.py b/debug_toolbar/apps.py index a49dc6b72..a170c8fa6 100644 --- a/debug_toolbar/apps.py +++ b/debug_toolbar/apps.py @@ -1,5 +1,7 @@ from __future__ import absolute_import, unicode_literals +import inspect + from django.apps import AppConfig from django.conf import settings from django.core.checks import Error, register @@ -63,4 +65,7 @@ def is_middleware_class(middleware_class, middleware_path): middleware_cls = import_string(middleware_path) except ImportError: return - return issubclass(middleware_cls, middleware_class) + return ( + inspect.isclass(middleware_cls) and + issubclass(middleware_cls, middleware_class) + ) diff --git a/tests/middleware.py b/tests/middleware.py new file mode 100644 index 000000000..0b717f332 --- /dev/null +++ b/tests/middleware.py @@ -0,0 +1,7 @@ +def simple_middleware(get_response): + """ + Used to test Django 1.10 compatibility. + """ + def middleware(request): + return get_response(request) + return middleware diff --git a/tests/test_integration.py b/tests/test_integration.py index 6e400ae26..e48132297 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -6,6 +6,7 @@ import unittest from xml.etree import ElementTree as ET +import django from django.contrib.staticfiles.testing import StaticLiveServerTestCase from django.core.checks import Error, run_checks from django.test import RequestFactory, TestCase @@ -243,3 +244,18 @@ def test_check_gzip_middleware_error(self): ), ] ) + + @override_settings( + MIDDLEWARE=[ + 'debug_toolbar.middleware.DebugToolbarMiddleware', + 'tests.middleware.simple_middleware', + ], + MIDDLEWARE_CLASSES=None + ) + def test_middleware_factory_functions_supported(self): + messages = run_checks() + + if django.VERSION[:2] < (1, 10): + self.assertEqual(messages, []) + else: + self.assertEqual(messages[0].id, '1_10.W001')