diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2010-04-09 13:08:08 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2010-04-09 13:08:08 +0000 |
| commit | 7b47609629692241848469fabc24fa798c0ac70b (patch) | |
| tree | 6c5583612055f3f7ad1c3cffab0cc4b49e89ceb3 | |
| parent | e9bbdb39de3047761fa8d03d5241eccd571093ff (diff) | |
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
| -rw-r--r-- | django/core/management/commands/dumpdata.py | 4 | ||||
| -rw-r--r-- | tests/regressiontests/multiple_database/tests.py | 29 |
2 files changed, 30 insertions, 3 deletions
diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py index 88b2c8fd57..aaaa5845a5 100644 --- a/django/core/management/commands/dumpdata.py +++ b/django/core/management/commands/dumpdata.py @@ -1,7 +1,7 @@ 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: diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py index 28aa7c249d..0aac69401a 100644 --- a/tests/regressiontests/multiple_database/tests.py +++ b/tests/regressiontests/multiple_database/tests.py @@ -1,8 +1,11 @@ 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 |
