summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAarni Koskela <akx@iki.fi>2019-04-04 13:02:47 +0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-04-26 11:31:06 +0200
commitefeceba589974b95b35b2e25df86498c96315518 (patch)
tree68b8d12d2385cfe10b9cb939f50e0f6354fe410d
parent85676979a4845fa9b586ec42d4ddbdb9f28b7cc8 (diff)
Fixed #30312 -- Relaxed admin check from django.contrib.sessions to SessionMiddleware subclasses.
-rw-r--r--django/contrib/admin/checks.py7
-rw-r--r--docs/ref/checks.txt4
-rw-r--r--docs/releases/2.2.1.txt6
-rw-r--r--tests/admin_checks/tests.py20
-rw-r--r--tests/admin_scripts/tests.py2
5 files changed, 28 insertions, 11 deletions
diff --git a/django/contrib/admin/checks.py b/django/contrib/admin/checks.py
index 76c3bd5657..f82c20c2f1 100644
--- a/django/contrib/admin/checks.py
+++ b/django/contrib/admin/checks.py
@@ -65,7 +65,6 @@ def check_dependencies(**kwargs):
('django.contrib.contenttypes', 401),
('django.contrib.auth', 405),
('django.contrib.messages', 406),
- ('django.contrib.sessions', 407),
)
for app_name, error_code in app_dependencies:
if not apps.is_installed(app_name):
@@ -118,6 +117,12 @@ def check_dependencies(**kwargs):
"be in MIDDLEWARE in order to use the admin application.",
id='admin.E409',
))
+ if not _contains_subclass('django.contrib.sessions.middleware.SessionMiddleware', settings.MIDDLEWARE):
+ errors.append(checks.Error(
+ "'django.contrib.sessions.middleware.SessionMiddleware' must "
+ "be in MIDDLEWARE in order to use the admin application.",
+ id='admin.E410',
+ ))
return errors
diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt
index 1f0601ab5d..973ccebe90 100644
--- a/docs/ref/checks.txt
+++ b/docs/ref/checks.txt
@@ -666,13 +666,13 @@ The following checks are performed on the default
:setting:`INSTALLED_APPS` in order to use the admin application.
* **admin.E406**: :mod:`django.contrib.messages` must be in
:setting:`INSTALLED_APPS` in order to use the admin application.
-* **admin.E407**: :mod:`django.contrib.sessions` must be in
- :setting:`INSTALLED_APPS` in order to use the admin application.
* **admin.E408**:
:class:`django.contrib.auth.middleware.AuthenticationMiddleware` must be in
:setting:`MIDDLEWARE` in order to use the admin application.
* **admin.E409**: :class:`django.contrib.messages.middleware.MessageMiddleware`
must be in :setting:`MIDDLEWARE` in order to use the admin application.
+* **admin.E410**: :class:`django.contrib.sessions.middleware.SessionMiddleware`
+ must be in :setting:`MIDDLEWARE` in order to use the admin application.
``auth``
--------
diff --git a/docs/releases/2.2.1.txt b/docs/releases/2.2.1.txt
index 0ca76bcbf8..b7b1f6112d 100644
--- a/docs/releases/2.2.1.txt
+++ b/docs/releases/2.2.1.txt
@@ -49,3 +49,9 @@ Bugfixes
* Fixed a regression in Django 2.2 that caused an exception to be raised when
a custom error handler could not be imported (:ticket:`30318`).
+
+* Relaxed the system check added in Django 2.2 for the admin app's dependencies
+ to reallow use of
+ :class:`~django.contrib.sessions.middleware.SessionMiddleware` subclasses,
+ rather than requiring :mod:`django.contrib.sessions` to be in
+ :setting:`INSTALLED_APPS` (:ticket:`30312`).
diff --git a/tests/admin_checks/tests.py b/tests/admin_checks/tests.py
index c7fe39b91e..1e267e03a3 100644
--- a/tests/admin_checks/tests.py
+++ b/tests/admin_checks/tests.py
@@ -5,6 +5,7 @@ from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.middleware import AuthenticationMiddleware
from django.contrib.contenttypes.admin import GenericStackedInline
from django.contrib.messages.middleware import MessageMiddleware
+from django.contrib.sessions.middleware import SessionMiddleware
from django.core import checks
from django.test import SimpleTestCase, override_settings
@@ -52,13 +53,16 @@ class ModelBackendSubclass(ModelBackend):
pass
+class SessionMiddlewareSubclass(SessionMiddleware):
+ pass
+
+
@override_settings(
SILENCED_SYSTEM_CHECKS=['fields.W342'], # ForeignKey(unique=True)
INSTALLED_APPS=[
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
- 'django.contrib.sessions',
'django.contrib.messages',
'admin_checks',
],
@@ -93,11 +97,6 @@ class SystemChecksTestCase(SimpleTestCase):
"to use the admin application.",
id='admin.E406',
),
- checks.Error(
- "'django.contrib.sessions' must be in INSTALLED_APPS in order "
- "to use the admin application.",
- id='admin.E407',
- )
]
self.assertEqual(errors, expected)
@@ -201,13 +200,19 @@ class SystemChecksTestCase(SimpleTestCase):
"'django.contrib.messages.middleware.MessageMiddleware' "
"must be in MIDDLEWARE in order to use the admin application.",
id='admin.E409',
- )
+ ),
+ checks.Error(
+ "'django.contrib.sessions.middleware.SessionMiddleware' "
+ "must be in MIDDLEWARE in order to use the admin application.",
+ id='admin.E410',
+ ),
]
self.assertEqual(errors, expected)
@override_settings(MIDDLEWARE=[
'admin_checks.tests.AuthenticationMiddlewareSubclass',
'admin_checks.tests.MessageMiddlewareSubclass',
+ 'admin_checks.tests.SessionMiddlewareSubclass',
])
def test_middleware_subclasses(self):
self.assertEqual(admin.checks.check_dependencies(), [])
@@ -216,6 +221,7 @@ class SystemChecksTestCase(SimpleTestCase):
'django.contrib.does.not.Exist',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
])
def test_admin_check_ignores_import_error_in_middleware(self):
self.assertEqual(admin.checks.check_dependencies(), [])
diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py
index 08d188e88a..d6ea84da7a 100644
--- a/tests/admin_scripts/tests.py
+++ b/tests/admin_scripts/tests.py
@@ -1103,13 +1103,13 @@ class ManageCheck(AdminScriptTestCase):
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
- 'django.contrib.sessions',
],
sdict={
'DEBUG': True,
'MIDDLEWARE': [
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
],
'TEMPLATES': [
{