diff options
| author | Senko Rasic <senko.rasic@dobarkod.hr> | 2013-05-18 17:51:14 +0200 |
|---|---|---|
| committer | Senko Rasic <senko.rasic@dobarkod.hr> | 2013-05-19 10:56:09 +0200 |
| commit | cc3b3ba93a7bfdd2ece739e97e36150a719acd3e (patch) | |
| tree | 6a54337aa8f1ca72e1bb1bf1eefa3b09f09131f4 | |
| parent | 0a50311063c416ec4d39f518e8d8110dd7eddbdf (diff) | |
Fixed #18990: Loaddata now complains if fixture doesn't exist
The fixture named "initial_data" is exceptional though; if it
doesn't exist, the error is not raised. This allows syncdb and
flush management commands to attempt to load it without causing
an error if it doesn't exist.
| -rw-r--r-- | django/core/management/commands/loaddata.py | 11 | ||||
| -rw-r--r-- | tests/fixtures/tests.py | 17 | ||||
| -rw-r--r-- | tests/fixtures_regress/tests.py | 15 |
3 files changed, 29 insertions, 14 deletions
diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py index c95d11cf60..fbafed3f92 100644 --- a/django/core/management/commands/loaddata.py +++ b/django/core/management/commands/loaddata.py @@ -162,9 +162,14 @@ class Command(BaseCommand): else: fixture_dirs = app_fixtures + list(settings.FIXTURE_DIRS) + [''] + label_found = False for fixture_dir in fixture_dirs: - self.process_dir(fixture_dir, fixture_name, compression_formats, - formats) + found = self.process_dir(fixture_dir, fixture_name, + compression_formats, formats) + label_found = label_found or found + + if fixture_name != 'initial_data' and not label_found: + raise CommandError("No fixture named '%s' found." % fixture_name) def process_dir(self, fixture_dir, fixture_name, compression_formats, serialization_formats): @@ -242,3 +247,5 @@ class Command(BaseCommand): raise CommandError( "No fixture data found for '%s'. (File format may be invalid.)" % (fixture_name)) + + return label_found diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index 103612198e..93f2438ce9 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -137,8 +137,14 @@ class FixtureLoadingTests(DumpDataAssertMixin, TestCase): '<Book: Music for all ages by Artist formerly known as "Prince" and Django Reinhardt>' ]) - # Load a fixture that doesn't exist - management.call_command('loaddata', 'unknown.json', verbosity=0, commit=False) + # Loading a fixture that doesn't exist results in an error + with self.assertRaises(management.CommandError): + management.call_command('loaddata', 'unknown.json', verbosity=0, + commit=False) + + # An attempt to load a nonexistent 'initial_data' fixture isn't an error + management.call_command('loaddata', 'initial_data.json', verbosity=0, + commit=False) # object list is unaffected self.assertQuerysetEqual(Article.objects.all(), [ @@ -273,10 +279,11 @@ class FixtureLoadingTests(DumpDataAssertMixin, TestCase): def test_unmatched_identifier_loading(self): # Try to load db fixture 3. This won't load because the database identifier doesn't match - management.call_command('loaddata', 'db_fixture_3', verbosity=0, commit=False) - self.assertQuerysetEqual(Article.objects.all(), []) + with self.assertRaises(management.CommandError): + management.call_command('loaddata', 'db_fixture_3', verbosity=0, commit=False) - management.call_command('loaddata', 'db_fixture_3', verbosity=0, using='default', commit=False) + with self.assertRaises(management.CommandError): + management.call_command('loaddata', 'db_fixture_3', verbosity=0, using='default', commit=False) self.assertQuerysetEqual(Article.objects.all(), []) def test_output_formats(self): diff --git a/tests/fixtures_regress/tests.py b/tests/fixtures_regress/tests.py index 02e923e386..df84d77a3f 100644 --- a/tests/fixtures_regress/tests.py +++ b/tests/fixtures_regress/tests.py @@ -441,13 +441,14 @@ class TestFixtures(TestCase): def test_loaddata_not_existant_fixture_file(self): stdout_output = StringIO() - management.call_command( - 'loaddata', - 'this_fixture_doesnt_exist', - verbosity=2, - commit=False, - stdout=stdout_output, - ) + with self.assertRaises(management.CommandError): + management.call_command( + 'loaddata', + 'this_fixture_doesnt_exist', + verbosity=2, + commit=False, + stdout=stdout_output, + ) self.assertTrue("No xml fixture 'this_fixture_doesnt_exist' in" in force_text(stdout_output.getvalue())) |
