Commit cc3b3ba9 authored by Senko Rasic's avatar Senko Rasic
Browse files

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.
parent 0a503110
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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
+12 −5
Original line number Diff line number Diff line
@@ -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,9 +279,10 @@ 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
        with self.assertRaises(management.CommandError):
            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, using='default', commit=False)
        self.assertQuerysetEqual(Article.objects.all(), [])

+8 −7
Original line number Diff line number Diff line
@@ -441,6 +441,7 @@ class TestFixtures(TestCase):

    def test_loaddata_not_existant_fixture_file(self):
        stdout_output = StringIO()
        with self.assertRaises(management.CommandError):
            management.call_command(
                'loaddata',
                'this_fixture_doesnt_exist',