1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Fixed #19031 -- Added a warning when using override_settings with 'DATABASES'

This commit is contained in:
Joeri Bekker
2013-05-18 13:43:51 +02:00
committed by Tim Graham
parent b82a2c4138
commit 66f3d57b79
6 changed files with 64 additions and 4 deletions

View File

@@ -1,5 +1,6 @@
import os
import time
import warnings
from django.conf import settings
from django.db import connections
@@ -9,11 +10,14 @@ from django.utils.functional import empty
template_rendered = Signal(providing_args=["template", "context"])
setting_changed = Signal(providing_args=["setting", "value"])
setting_changed = Signal(providing_args=["setting", "value", "enter"])
# Most setting_changed receivers are supposed to be added below,
# except for cases where the receiver is related to a contrib app.
# Settings that may not work well when using 'override_settings' (#19031)
COMPLEX_OVERRIDE_SETTINGS = set(['DATABASES'])
@receiver(setting_changed)
def update_connections_time_zone(**kwargs):
@@ -74,8 +78,15 @@ def language_changed(**kwargs):
if kwargs['setting'] == 'LOCALE_PATHS':
trans_real._translations = {}
@receiver(setting_changed)
def file_storage_changed(**kwargs):
if kwargs['setting'] in ('MEDIA_ROOT', 'DEFAULT_FILE_STORAGE'):
from django.core.files.storage import default_storage
default_storage._wrapped = empty
@receiver(setting_changed)
def complex_setting_changed(**kwargs):
if kwargs['enter'] and kwargs['setting'] in COMPLEX_OVERRIDE_SETTINGS:
warnings.warn("Overriding setting %s can lead to unexpected behaviour." % kwargs['setting'])

View File

@@ -228,7 +228,7 @@ class override_settings(object):
settings._wrapped = override
for key, new_value in self.options.items():
setting_changed.send(sender=settings._wrapped.__class__,
setting=key, value=new_value)
setting=key, value=new_value, enter=True)
def disable(self):
settings._wrapped = self.wrapped
@@ -236,7 +236,7 @@ class override_settings(object):
for key in self.options:
new_value = getattr(settings, key, None)
setting_changed.send(sender=settings._wrapped.__class__,
setting=key, value=new_value)
setting=key, value=new_value, enter=False)
def compare_xml(want, got):