|
@@ -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'])
|