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:
@@ -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'])
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user