Fixed #18196 -- Improved loaddata error messages.

This commit is contained in:
Claude Paroz 2012-08-21 21:52:25 +02:00
parent a193372753
commit 4353a6163c
3 changed files with 31 additions and 4 deletions

View File

@ -196,6 +196,10 @@ class Command(BaseCommand):
loaded_object_count += loaded_objects_in_fixture loaded_object_count += loaded_objects_in_fixture
fixture_object_count += objects_in_fixture fixture_object_count += objects_in_fixture
label_found = True label_found = True
except Exception as e:
if not isinstance(e, CommandError):
e.args = ("Problem installing fixture '%s': %s" % (full_path, e),)
raise
finally: finally:
fixture.close() fixture.close()
@ -209,7 +213,11 @@ class Command(BaseCommand):
# Since we disabled constraint checks, we must manually check for # Since we disabled constraint checks, we must manually check for
# any invalid keys that might have been added # any invalid keys that might have been added
table_names = [model._meta.db_table for model in models] table_names = [model._meta.db_table for model in models]
connection.check_constraints(table_names=table_names) try:
connection.check_constraints(table_names=table_names)
except Exception as e:
e.args = ("Problem installing fixtures: %s" % e,)
raise
except (SystemExit, KeyboardInterrupt): except (SystemExit, KeyboardInterrupt):
raise raise
@ -217,8 +225,6 @@ class Command(BaseCommand):
if commit: if commit:
transaction.rollback(using=using) transaction.rollback(using=using)
transaction.leave_transaction_management(using=using) transaction.leave_transaction_management(using=using)
if not isinstance(e, CommandError):
e.args = ("Problem installing fixture '%s': %s" % (full_path, e),)
raise raise
# If we found even one object in a fixture, we need to reset the # If we found even one object in a fixture, we need to reset the

View File

@ -4,7 +4,6 @@ import time
from django.conf import settings from django.conf import settings
from django.db import connections from django.db import connections
from django.dispatch import receiver, Signal from django.dispatch import receiver, Signal
from django.template import context
from django.utils import timezone from django.utils import timezone
template_rendered = Signal(providing_args=["template", "context"]) template_rendered = Signal(providing_args=["template", "context"])
@ -48,9 +47,17 @@ def update_connections_time_zone(**kwargs):
@receiver(setting_changed) @receiver(setting_changed)
def clear_context_processors_cache(**kwargs): def clear_context_processors_cache(**kwargs):
if kwargs['setting'] == 'TEMPLATE_CONTEXT_PROCESSORS': if kwargs['setting'] == 'TEMPLATE_CONTEXT_PROCESSORS':
from django.template import context
context._standard_context_processors = None context._standard_context_processors = None
@receiver(setting_changed)
def clear_serializers_cache(**kwargs):
if kwargs['setting'] == 'SERIALIZATION_MODULES':
from django.core import serializers
serializers._serializers = {}
@receiver(setting_changed) @receiver(setting_changed)
def language_changed(**kwargs): def language_changed(**kwargs):
if kwargs['setting'] in ('LOCALE_PATHS', 'LANGUAGE_CODE'): if kwargs['setting'] in ('LOCALE_PATHS', 'LANGUAGE_CODE'):

View File

@ -126,6 +126,20 @@ class TestFixtures(TestCase):
commit=False, commit=False,
) )
@override_settings(SERIALIZATION_MODULES={'unkn': 'unexistent.path'})
def test_unimportable_serializer(self):
"""
Test that failing serializer import raises the proper error
"""
with self.assertRaisesRegexp(ImportError,
"No module named unexistent.path"):
management.call_command(
'loaddata',
'bad_fixture1.unkn',
verbosity=0,
commit=False,
)
def test_invalid_data(self): def test_invalid_data(self):
""" """
Test for ticket #4371 -- Loading a fixture file with invalid data Test for ticket #4371 -- Loading a fixture file with invalid data