Fixed #18845 -- Do not swallow AttributeErrors when running commands

This commit is contained in:
Claude Paroz 2012-09-26 15:07:11 +02:00
parent 2c8267bf3d
commit bb7da7844f
2 changed files with 21 additions and 6 deletions

View File

@ -103,10 +103,12 @@ def get_commands():
_commands = dict([(name, 'django.core') for name in find_commands(__path__[0])]) _commands = dict([(name, 'django.core') for name in find_commands(__path__[0])])
# Find the installed apps # Find the installed apps
try:
from django.conf import settings from django.conf import settings
try:
apps = settings.INSTALLED_APPS apps = settings.INSTALLED_APPS
except (AttributeError, ImproperlyConfigured): except ImproperlyConfigured:
# Still useful for commands that do not require functional settings,
# like startproject or help
apps = [] apps = []
# Find and load the management module for each installed app. # Find and load the management module for each installed app.

View File

@ -982,13 +982,11 @@ class ManageMultipleSettings(AdminScriptTestCase):
self.assertNoOutput(err) self.assertNoOutput(err)
self.assertOutput(out, "EXECUTE:NoArgsCommand") self.assertOutput(out, "EXECUTE:NoArgsCommand")
class ManageSettingsWithImportError(AdminScriptTestCase): class ManageSettingsWithImportError(AdminScriptTestCase):
"""Tests for manage.py when using the default settings.py file """Tests for manage.py when using the default settings.py file
with an import error. Ticket #14130. with an import error. Ticket #14130.
""" """
def setUp(self):
self.write_settings_with_import_error('settings.py')
def tearDown(self): def tearDown(self):
self.remove_settings('settings.py') self.remove_settings('settings.py')
@ -1004,12 +1002,27 @@ class ManageSettingsWithImportError(AdminScriptTestCase):
settings_file.write('# The next line will cause an import error:\nimport foo42bar\n') settings_file.write('# The next line will cause an import error:\nimport foo42bar\n')
def test_builtin_command(self): def test_builtin_command(self):
"import error: manage.py builtin commands shows useful diagnostic info when settings with import errors is provided" """
import error: manage.py builtin commands shows useful diagnostic info
when settings with import errors is provided
"""
self.write_settings_with_import_error('settings.py')
args = ['sqlall', 'admin_scripts'] args = ['sqlall', 'admin_scripts']
out, err = self.run_manage(args) out, err = self.run_manage(args)
self.assertNoOutput(out) self.assertNoOutput(out)
self.assertOutput(err, "No module named foo42bar") self.assertOutput(err, "No module named foo42bar")
def test_builtin_command_with_attribute_error(self):
"""
manage.py builtin commands does not swallow attribute errors from bad settings (#18845)
"""
self.write_settings('settings.py', sdict={'BAD_VAR': 'INSTALLED_APPS.crash'})
args = ['collectstatic', 'admin_scripts']
out, err = self.run_manage(args)
self.assertNoOutput(out)
self.assertOutput(err, "AttributeError: 'list' object has no attribute 'crash'")
class ManageValidate(AdminScriptTestCase): class ManageValidate(AdminScriptTestCase):
def tearDown(self): def tearDown(self):
self.remove_settings('settings.py') self.remove_settings('settings.py')