Fixed #23933 -- Made override_settings(DATABASE_ROUTERS) affect the master router.
This commit is contained in:
parent
d2202ec2d4
commit
e6f19ec322
|
@ -4,7 +4,8 @@ import threading
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import connections
|
from django.db import connections, router
|
||||||
|
from django.db.utils import ConnectionRouter
|
||||||
from django.dispatch import receiver, Signal
|
from django.dispatch import receiver, Signal
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.functional import empty
|
from django.utils.functional import empty
|
||||||
|
@ -77,6 +78,12 @@ def update_connections_time_zone(**kwargs):
|
||||||
conn.cursor().execute(tz_sql, [tz])
|
conn.cursor().execute(tz_sql, [tz])
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(setting_changed)
|
||||||
|
def clear_routers_cache(**kwargs):
|
||||||
|
if kwargs['setting'] == 'DATABASE_ROUTERS':
|
||||||
|
router.routers = ConnectionRouter().routers
|
||||||
|
|
||||||
|
|
||||||
@receiver(setting_changed)
|
@receiver(setting_changed)
|
||||||
def reset_default_template_engine(**kwargs):
|
def reset_default_template_engine(**kwargs):
|
||||||
if kwargs['setting'] in {
|
if kwargs['setting'] in {
|
||||||
|
|
|
@ -500,6 +500,9 @@ Tests
|
||||||
for Oracle: :setting:`DATAFILE`, :setting:`DATAFILE_TMP`,
|
for Oracle: :setting:`DATAFILE`, :setting:`DATAFILE_TMP`,
|
||||||
:setting:`DATAFILE_MAXSIZE` and :setting:`DATAFILE_TMP_MAXSIZE`.
|
:setting:`DATAFILE_MAXSIZE` and :setting:`DATAFILE_TMP_MAXSIZE`.
|
||||||
|
|
||||||
|
* The :func:`~django.test.override_settings` decorator can now affect the
|
||||||
|
master router in :setting:`DATABASE_ROUTERS`.
|
||||||
|
|
||||||
Validators
|
Validators
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import unittest
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from django.core.urlresolvers import NoReverseMatch, reverse
|
from django.core.urlresolvers import NoReverseMatch, reverse
|
||||||
from django.db import connection
|
from django.db import connection, router
|
||||||
from django.forms import EmailField, IntegerField
|
from django.forms import EmailField, IntegerField
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
@ -842,3 +842,11 @@ class OverrideSettingsTests(TestCase):
|
||||||
self.assertIsNone(default_storage.directory_permissions_mode)
|
self.assertIsNone(default_storage.directory_permissions_mode)
|
||||||
with self.settings(FILE_UPLOAD_DIRECTORY_PERMISSIONS=0o777):
|
with self.settings(FILE_UPLOAD_DIRECTORY_PERMISSIONS=0o777):
|
||||||
self.assertEqual(default_storage.directory_permissions_mode, 0o777)
|
self.assertEqual(default_storage.directory_permissions_mode, 0o777)
|
||||||
|
|
||||||
|
def test_override_database_routers(self):
|
||||||
|
"""
|
||||||
|
Overriding DATABASE_ROUTERS should update the master router.
|
||||||
|
"""
|
||||||
|
test_routers = (object(),)
|
||||||
|
with self.settings(DATABASE_ROUTERS=test_routers):
|
||||||
|
self.assertSequenceEqual(router.routers, test_routers)
|
||||||
|
|
Loading…
Reference in New Issue