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):
def routers(self):
if self._routers is None:
self._routers = settings.DATABASE_ROUTERS
routers = []
for r in self._routers:
if isinstance(r, six.string_types):
router = import_by_path(r)()
else:
router = r
self._routers.append(router)
return self._routers
routers.append(router)
return routers
def _router_func(action):
def _route_db(self, model, **hints):
......
......@@ -5,11 +5,13 @@ import pickle
from operator import attrgetter
import warnings
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.core import management
from django.db import connections, router, DEFAULT_DB_ALIAS
from django.db.models import signals
from django.db.utils import ConnectionRouter
from django.test import TestCase
from django.test.utils import override_settings
from django.utils.six import StringIO
......@@ -918,6 +920,7 @@ class QueryTestCase(TestCase):
published=datetime.date(2009, 5, 4),
extra_arg=True)
class TestRouter(object):
# A test router. The behavior is vaguely master/slave, but the
# databases aren't assumed to propagate changes.
......@@ -972,6 +975,30 @@ class WriteRouter(object):
def db_for_write(self, model, **hints):
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):
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