From 08f788b169a30d26f50433083aca253a4e4031b2 Mon Sep 17 00:00:00 2001 From: Benjamin Bach Date: Sun, 1 Apr 2018 12:06:56 +0200 Subject: [PATCH] Fixed #29226 -- Doc'd modify_settings() ordering considerations for Python < 3.6. --- docs/topics/testing/tools.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/topics/testing/tools.txt b/docs/topics/testing/tools.txt index 8354771685..92e96e8c98 100644 --- a/docs/topics/testing/tools.txt +++ b/docs/topics/testing/tools.txt @@ -1277,6 +1277,23 @@ The decorator can also be applied to test case classes:: decorator. For a given class, :func:`~django.test.modify_settings` is always applied after :func:`~django.test.override_settings`. +.. admonition:: Considerations with Python 3.5 + + If using Python 3.5 (or older, if using an older version of Django), avoid + mixing ``remove`` with ``append`` and ``prepend`` in + :func:`~django.test.modify_settings`. In some cases it matters whether a + value is first added and then removed or vice versa, and dictionary key + order isn't preserved until Python 3.6. Instead, apply the decorator twice + to guarantee the order of operations. For example, to ensure that + ``SessionMiddleware`` appears first in ``MIDDLEWARE``:: + + @modify_settings(MIDDLEWARE={ + 'remove': ['django.contrib.sessions.middleware.SessionMiddleware'], + ) + @modify_settings(MIDDLEWARE={ + 'prepend': ['django.contrib.sessions.middleware.SessionMiddleware'], + }) + .. warning:: The settings file contains some settings that are only consulted during