mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
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.
This commit is contained in:
parent
0a50311063
commit
cc3b3ba93a
@ -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
|
||||
|
17
tests/fixtures/tests.py
vendored
17
tests/fixtures/tests.py
vendored
@ -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):
|
||||
|
@ -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()))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user