diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py index 4492e5c6cb..bd867796c2 100644 --- a/django/core/management/commands/loaddata.py +++ b/django/core/management/commands/loaddata.py @@ -62,7 +62,7 @@ class Command(BaseCommand): fixture_object_count = 0 models = set() - humanize = lambda dirname: dirname and "'%s'" % dirname or 'absolute path' + humanize = lambda dirname: "'%s'" % dirname if dirname else 'absolute path' # Get a cursor (even though we don't need one yet). This has # the side effect of initializing the test database (if @@ -160,6 +160,11 @@ class Command(BaseCommand): open_method = compression_types[compression_format] try: fixture = open_method(full_path, 'r') + except IOError: + if verbosity >= 2: + self.stdout.write("No %s fixture '%s' in %s.\n" % \ + (format, fixture_name, humanize(fixture_dir))) + else: if label_found: fixture.close() self.stderr.write(self.style.ERROR("Multiple fixtures named '%s' in %s. Aborting.\n" % @@ -232,11 +237,6 @@ class Command(BaseCommand): transaction.leave_transaction_management(using=using) return - except Exception, e: - if verbosity >= 2: - self.stdout.write("No %s fixture '%s' in %s.\n" % \ - (format, fixture_name, humanize(fixture_dir))) - # If we found even one object in a fixture, we need to reset the # database sequences. if loaded_object_count > 0: diff --git a/tests/regressiontests/fixtures_regress/tests.py b/tests/regressiontests/fixtures_regress/tests.py index 26e436b3c5..5b8dc6659f 100644 --- a/tests/regressiontests/fixtures_regress/tests.py +++ b/tests/regressiontests/fixtures_regress/tests.py @@ -405,6 +405,18 @@ class TestFixtures(TestCase): stderr.getvalue(), 'No database fixture specified. Please provide the path of at least one fixture in the command line.\n' ) + 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, + ) + self.assertTrue("No xml fixture 'this_fixture_doesnt_exist' in" in + stdout_output.getvalue()) + class NaturalKeyFixtureTests(TestCase):