Kaydet (Commit) 7e95d7a9 authored tarafından Claude Paroz's avatar Claude Paroz

Fixed a regression in router initialization

Regression was introduced in 6a6bb168. Thanks Bas Peschier for the
report.
üst fbab3209
...@@ -224,13 +224,14 @@ class ConnectionRouter(object): ...@@ -224,13 +224,14 @@ class ConnectionRouter(object):
def routers(self): def routers(self):
if self._routers is None: if self._routers is None:
self._routers = settings.DATABASE_ROUTERS self._routers = settings.DATABASE_ROUTERS
routers = []
for r in self._routers: for r in self._routers:
if isinstance(r, six.string_types): if isinstance(r, six.string_types):
router = import_by_path(r)() router = import_by_path(r)()
else: else:
router = r router = r
self._routers.append(router) routers.append(router)
return self._routers return routers
def _router_func(action): def _router_func(action):
def _route_db(self, model, **hints): def _route_db(self, model, **hints):
......
...@@ -5,11 +5,13 @@ import pickle ...@@ -5,11 +5,13 @@ import pickle
from operator import attrgetter from operator import attrgetter
import warnings import warnings
from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core import management from django.core import management
from django.db import connections, router, DEFAULT_DB_ALIAS from django.db import connections, router, DEFAULT_DB_ALIAS
from django.db.models import signals from django.db.models import signals
from django.db.utils import ConnectionRouter
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
from django.utils.six import StringIO from django.utils.six import StringIO
...@@ -918,6 +920,7 @@ class QueryTestCase(TestCase): ...@@ -918,6 +920,7 @@ class QueryTestCase(TestCase):
published=datetime.date(2009, 5, 4), published=datetime.date(2009, 5, 4),
extra_arg=True) extra_arg=True)
class TestRouter(object): class TestRouter(object):
# A test router. The behavior is vaguely master/slave, but the # A test router. The behavior is vaguely master/slave, but the
# databases aren't assumed to propagate changes. # databases aren't assumed to propagate changes.
...@@ -972,6 +975,30 @@ class WriteRouter(object): ...@@ -972,6 +975,30 @@ class WriteRouter(object):
def db_for_write(self, model, **hints): def db_for_write(self, model, **hints):
return 'writer' return 'writer'
class ConnectionRouterTestCase(TestCase):
@override_settings(DATABASE_ROUTERS=[
'multiple_database.tests.TestRouter',
'multiple_database.tests.WriteRouter'])
def test_router_init_default(self):
router = ConnectionRouter()
self.assertListEqual([r.__class__.__name__ for r in router.routers],
['TestRouter', 'WriteRouter'])
def test_router_init_arg(self):
router = ConnectionRouter([
'multiple_database.tests.TestRouter',
'multiple_database.tests.WriteRouter'
])
self.assertListEqual([r.__class__.__name__ for r in router.routers],
['TestRouter', 'WriteRouter'])
# Init with instances instead of strings
router = ConnectionRouter([TestRouter(), WriteRouter()])
self.assertListEqual([r.__class__.__name__ for r in router.routers],
['TestRouter', 'WriteRouter'])
class RouterTestCase(TestCase): class RouterTestCase(TestCase):
multi_db = True multi_db = True
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment