Commit 7e95d7a9 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed a regression in router initialization

Regression was introduced in 6a6bb168. Thanks Bas Peschier for the
report.
parent fbab3209
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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):
+27 −0
Original line number Diff line number Diff line
@@ -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