Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #18213 -- Allowed empty fixtures (emit a warning rather than ra…

…ising an exception).
  • Loading branch information...
commit 382c53d7d88da70a3645c6db063995382f61dc45 1 parent 70c080f
@haxoza haxoza authored timgraham committed
View
12 django/core/management/commands/loaddata.py
@@ -3,6 +3,7 @@
import glob
import gzip
import os
+import warnings
import zipfile
from optparse import make_option
import warnings
@@ -156,12 +157,13 @@ def load_label(self, fixture_label):
finally:
fixture.close()
- # If the fixture we loaded contains 0 objects, assume that an
- # error was encountered during fixture loading.
+ # Warn if the fixture we loaded contains 0 objects.
if objects_in_fixture == 0:
- raise CommandError(
- "No fixture data found for '%s'. "
- "(File format may be invalid.)" % fixture_name)
+ warnings.warn(
+ "No fixture data found for '%s'. (File format may be "
+ "invalid.)" % fixture_name,
+ RuntimeWarning
+ )
def _find_fixtures(self, fixture_label):
"""
View
3  docs/releases/1.7.txt
@@ -113,6 +113,9 @@ Miscellaneous
:attr:`~django.forms.formsets.BaseFormSet.can_delete` for instructions on how
to manually delete objects from deleted forms.
+* Loading empty fixtures emits a ``RuntimeWarning`` rather than raising
+ :class:`~django.core.management.CommandError`.
+
Features deprecated in 1.7
==========================
View
39 tests/fixtures_regress/tests.py
@@ -181,55 +181,68 @@ def test_invalid_data(self):
"""
Test for ticket #4371 -- Loading a fixture file with invalid data
using explicit filename.
- Validate that error conditions are caught correctly
+ Test for ticket #18213 -- warning conditions are caught correctly
"""
- with six.assertRaisesRegex(self, management.CommandError,
- "No fixture data found for 'bad_fixture2'. \(File format may be invalid.\)"):
+ with warnings.catch_warnings(record=True) as warning_list:
+ warnings.simplefilter("always")
management.call_command(
'loaddata',
'bad_fixture2.xml',
verbosity=0,
)
+ warning = warning_list.pop()
+ self.assertEqual(warning.category, RuntimeWarning)
+ self.assertEqual(str(warning.message), "No fixture data found for 'bad_fixture2'. (File format may be invalid.)")
def test_invalid_data_no_ext(self):
"""
Test for ticket #4371 -- Loading a fixture file with invalid data
without file extension.
- Validate that error conditions are caught correctly
+ Test for ticket #18213 -- warning conditions are caught correctly
"""
- with six.assertRaisesRegex(self, management.CommandError,
- "No fixture data found for 'bad_fixture2'. \(File format may be invalid.\)"):
+ with warnings.catch_warnings(record=True) as warning_list:
+ warnings.simplefilter("always")
management.call_command(
'loaddata',
'bad_fixture2',
verbosity=0,
)
+ warning = warning_list.pop()
+ self.assertEqual(warning.category, RuntimeWarning)
+ self.assertEqual(str(warning.message), "No fixture data found for 'bad_fixture2'. (File format may be invalid.)")
def test_empty(self):
"""
- Test for ticket #4371 -- Loading a fixture file with no data returns an error.
- Validate that error conditions are caught correctly
+ Test for ticket #18213 -- Loading a fixture file with no data output a warning.
+ Previously empty fixture raises an error exception, see ticket #4371.
"""
- with six.assertRaisesRegex(self, management.CommandError,
- "No fixture data found for 'empty'. \(File format may be invalid.\)"):
+ with warnings.catch_warnings(record=True) as warning_list:
+ warnings.simplefilter("always")
management.call_command(
'loaddata',
'empty',
verbosity=0,
)
+ warning = warning_list.pop()
+ self.assertEqual(warning.category, RuntimeWarning)
+ self.assertEqual(str(warning.message), "No fixture data found for 'empty'. (File format may be invalid.)")
def test_error_message(self):
"""
- (Regression for #9011 - error message is correct)
+ Regression for #9011 - error message is correct.
+ Change from error to warning for ticket #18213.
"""
- with six.assertRaisesRegex(self, management.CommandError,
- "^No fixture data found for 'bad_fixture2'. \(File format may be invalid.\)$"):
+ with warnings.catch_warnings(record=True) as warning_list:
+ warnings.simplefilter("always")
management.call_command(
'loaddata',
'bad_fixture2',
'animal',
verbosity=0,
)
+ warning = warning_list.pop()
+ self.assertEqual(warning.category, RuntimeWarning)
+ self.assertEqual(str(warning.message), "No fixture data found for 'bad_fixture2'. (File format may be invalid.)")
def test_pg_sequence_resetting_checks(self):
"""
Please sign in to comment.
Something went wrong with that request. Please try again.