Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #1134 from senko/ticket_18990

Fixed #18990: Loaddata now complains if fixture doesn't exist
  • Loading branch information...
commit 7a99d1e167f81c5fcd1b9f7f548c5d6959cef2ef 2 parents cc62cbe + 65c5571
Andrew Godwin andrewgodwin authored
12 django/core/management/commands/loaddata.py
View
@@ -4,6 +4,7 @@
import gzip
import zipfile
from optparse import make_option
+import warnings
from django.conf import settings
from django.core import serializers
@@ -162,9 +163,14 @@ def load_label(self, fixture_label, app_fixtures):
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:
+ warnings.warn("No fixture named '%s' found." % fixture_name)
def process_dir(self, fixture_dir, fixture_name, compression_formats,
serialization_formats):
@@ -242,3 +248,5 @@ def process_dir(self, fixture_dir, fixture_name, compression_formats,
raise CommandError(
"No fixture data found for '%s'. (File format may be invalid.)" %
(fixture_name))
+
+ return label_found
23 tests/fixtures/tests.py
View
@@ -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,8 +139,18 @@ def test_loading_and_dumping(self):
'<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 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
+ 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(), [
@@ -273,10 +285,11 @@ def test_loading_using(self):
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 warnings.catch_warnings(record=True):
+ 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 warnings.catch_warnings(record=True):
+ management.call_command('loaddata', 'db_fixture_3', verbosity=0, using='default', commit=False)
self.assertQuerysetEqual(Article.objects.all(), [])
def test_output_formats(self):
6 tests/fixtures_model_package/tests.py
View
@@ -1,5 +1,7 @@
from __future__ import unicode_literals
+import warnings
+
from django.core import management
from django.db import transaction
from django.test import TestCase, TransactionTestCase
@@ -100,7 +102,9 @@ def test_loaddata(self):
)
# Load a fixture that doesn't exist
- management.call_command("loaddata", "unknown.json", verbosity=0, commit=False)
+ with warnings.catch_warnings(record=True):
+ management.call_command("loaddata", "unknown.json", verbosity=0, commit=False)
+
self.assertQuerysetEqual(
Article.objects.all(), [
"Django conquers world!",
16 tests/fixtures_regress/tests.py
View
@@ -4,6 +4,7 @@
import os
import re
+import warnings
from django.core.serializers.base import DeserializationError
from django.core import management
@@ -441,13 +442,14 @@ def test_loaddata_no_fixture_specified(self):
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 warnings.catch_warnings(record=True):
+ 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()))
Please sign in to comment.
Something went wrong with that request. Please try again.