Commit 7b476096 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #13308 -- Ensured that dumpdata correctly interacts with router...

Fixed #13308 -- Ensured that dumpdata correctly interacts with router allow_syncdb directions. Thanks to Francis (wizard_2) for the report.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12940 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent e9bbdb39
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
from django.core.exceptions import ImproperlyConfigured
from django.core.management.base import BaseCommand, CommandError
from django.core import serializers
from django.db import connections, DEFAULT_DB_ALIAS
from django.db import connections, router, DEFAULT_DB_ALIAS
from django.utils.datastructures import SortedDict

from optparse import make_option
@@ -79,7 +79,7 @@ class Command(BaseCommand):
        # Now collate the objects to be serialized.
        objects = []
        for model in sort_dependencies(app_list.items()):
            if not model._meta.proxy:
            if not model._meta.proxy and router.allow_syncdb(using, model):
                objects.extend(model._default_manager.using(using).all())

        try:
+28 −1
Original line number Diff line number Diff line
import datetime
import pickle
import sys
from StringIO import StringIO

from django.conf import settings
from django.contrib.auth.models import User
from django.core import management
from django.db import connections, router, DEFAULT_DB_ALIAS
from django.db.utils import ConnectionRouter
from django.test import TestCase
@@ -1211,10 +1214,19 @@ class AuthTestCase(TestCase):
        self.old_routers = router.routers
        router.routers = [AuthRouter()]

        # Redirect stdout to a buffer so we can test
        # the output of a management command
        self.old_stdout = sys.stdout
        self.stdout = StringIO()
        sys.stdout = self.stdout

    def tearDown(self):
        # Restore the 'other' database as an independent database
        router.routers = self.old_routers

        # Restore stdout
        sys.stdout = self.old_stdout

    def test_auth_manager(self):
        "The methods on the auth manager obey database hints"
        # Create one user using default allocation policy
@@ -1243,6 +1255,22 @@ class AuthTestCase(TestCase):
        self.assertEquals(User.objects.using('default').count(), 1)
        self.assertEquals(User.objects.using('other').count(), 1)

    def test_dumpdata(self):
        "Check that dumpdata honors allow_syncdb restrictions on the router"
        User.objects.create_user('alice', 'alice@example.com')
        User.objects.db_manager('default').create_user('bob', 'bob@example.com')

        # Check that dumping the default database doesn't try to include auth
        # because allow_syncdb prohibits auth on default
        self.stdout.flush()
        management.call_command('dumpdata', 'auth', format='json', database='default')
        self.assertEquals(self.stdout.getvalue(), '[]\n')

        # Check that dumping the other database does include auth
        self.stdout.flush()
        management.call_command('dumpdata', 'auth', format='json', database='other')
        self.assertTrue('alice@example.com' in self.stdout.getvalue())

class UserProfileTestCase(TestCase):
    def setUp(self):
        self.old_auth_profile_module = getattr(settings, 'AUTH_PROFILE_MODULE', None)
@@ -1307,7 +1335,6 @@ class FixtureTestCase(TestCase):
        except Book.DoesNotExist:
            self.fail('"The Definitive Guide to Django" should exist on both databases')


class PickleQuerySetTestCase(TestCase):
    multi_db = True