Fixed #18990 -- Loaddata now complains if fixture doesn't exist
If the fixture doesn't exist, loaddata will output a warning. The fixture named "initial_data" is exceptional though; if it doesn't exist, the warning is not emitted. This allows syncdb and flush management commands to attempt to load it without causing spurious warnings. Thanks to Derega, ptone, dirigeant and d1ffuz0r for contributions to the ticket.
This commit is contained in:
parent
cc3b3ba93a
commit
c44a2c40fe
|
@ -4,6 +4,7 @@ import os
|
|||
import gzip
|
||||
import zipfile
|
||||
from optparse import make_option
|
||||
import warnings
|
||||
|
||||
from django.conf import settings
|
||||
from django.core import serializers
|
||||
|
@ -169,7 +170,7 @@ class Command(BaseCommand):
|
|||
label_found = label_found or found
|
||||
|
||||
if fixture_name != 'initial_data' and not label_found:
|
||||
raise CommandError("No fixture named '%s' found." % fixture_name)
|
||||
warnings.warn("No fixture named '%s' found." % fixture_name)
|
||||
|
||||
def process_dir(self, fixture_dir, fixture_name, compression_formats,
|
||||
serialization_formats):
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import warnings
|
||||
|
||||
from django.contrib.sites.models import Site
|
||||
from django.core import management
|
||||
from django.db import connection, IntegrityError
|
||||
|
@ -137,14 +139,18 @@ class FixtureLoadingTests(DumpDataAssertMixin, TestCase):
|
|||
'<Book: Music for all ages by Artist formerly known as "Prince" and Django Reinhardt>'
|
||||
])
|
||||
|
||||
# Loading a fixture that doesn't exist results in an error
|
||||
with self.assertRaises(management.CommandError):
|
||||
# Loading a fixture that doesn't exist emits a warning
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
management.call_command('loaddata', 'unknown.json', verbosity=0,
|
||||
commit=False)
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertTrue(w[0].message, "No fixture named 'unknown' found.")
|
||||
|
||||
# An attempt to load a nonexistent 'initial_data' fixture isn't an error
|
||||
management.call_command('loaddata', 'initial_data.json', verbosity=0,
|
||||
commit=False)
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
management.call_command('loaddata', 'initial_data.json', verbosity=0,
|
||||
commit=False)
|
||||
self.assertEqual(len(w), 0)
|
||||
|
||||
# object list is unaffected
|
||||
self.assertQuerysetEqual(Article.objects.all(), [
|
||||
|
@ -279,10 +285,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):
|
||||
with warnings.catch_warnings(record=True):
|
||||
management.call_command('loaddata', 'db_fixture_3', verbosity=0, commit=False)
|
||||
|
||||
with self.assertRaises(management.CommandError):
|
||||
with warnings.catch_warnings(record=True):
|
||||
management.call_command('loaddata', 'db_fixture_3', verbosity=0, using='default', commit=False)
|
||||
self.assertQuerysetEqual(Article.objects.all(), [])
|
||||
|
||||
|
|
|
@ -100,7 +100,10 @@ class FixtureTestCase(TestCase):
|
|||
)
|
||||
|
||||
# Load a fixture that doesn't exist
|
||||
management.call_command("loaddata", "unknown.json", verbosity=0, commit=False)
|
||||
import warnings
|
||||
with warnings.catch_warnings(record=True):
|
||||
management.call_command("loaddata", "unknown.json", verbosity=0, commit=False)
|
||||
|
||||
self.assertQuerysetEqual(
|
||||
Article.objects.all(), [
|
||||
"Django conquers world!",
|
||||
|
|
|
@ -441,7 +441,8 @@ class TestFixtures(TestCase):
|
|||
|
||||
def test_loaddata_not_existant_fixture_file(self):
|
||||
stdout_output = StringIO()
|
||||
with self.assertRaises(management.CommandError):
|
||||
import warnings
|
||||
with warnings.catch_warnings(record=True):
|
||||
management.call_command(
|
||||
'loaddata',
|
||||
'this_fixture_doesnt_exist',
|
||||
|
|
Loading…
Reference in New Issue