summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSenko Rasic <senko.rasic@dobarkod.hr>2013-05-19 11:20:10 +0200
committerSenko Rasic <senko.rasic@dobarkod.hr>2013-05-19 11:31:27 +0200
commitc44a2c40fe0ed79b0fa00233a204d41e9c677750 (patch)
tree28ffd80082bb94eb3299f059e960b56afaf96065
parentcc3b3ba93a7bfdd2ece739e97e36150a719acd3e (diff)
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.
-rw-r--r--django/core/management/commands/loaddata.py3
-rw-r--r--tests/fixtures/tests.py18
-rw-r--r--tests/fixtures_model_package/tests.py5
-rw-r--r--tests/fixtures_regress/tests.py3
4 files changed, 20 insertions, 9 deletions
diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py
index fbafed3f92..ab9f7468c4 100644
--- a/django/core/management/commands/loaddata.py
+++ b/django/core/management/commands/loaddata.py
@@ -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):
diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py
index 93f2438ce9..f954933046 100644
--- a/tests/fixtures/tests.py
+++ b/tests/fixtures/tests.py
@@ -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(), [])
diff --git a/tests/fixtures_model_package/tests.py b/tests/fixtures_model_package/tests.py
index c250f647ce..af6b059c66 100644
--- a/tests/fixtures_model_package/tests.py
+++ b/tests/fixtures_model_package/tests.py
@@ -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!",
diff --git a/tests/fixtures_regress/tests.py b/tests/fixtures_regress/tests.py
index df84d77a3f..97ad6c326a 100644
--- a/tests/fixtures_regress/tests.py
+++ b/tests/fixtures_regress/tests.py
@@ -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',