mirror of https://github.com/django/django.git
Fixed #18845 -- Do not swallow AttributeErrors when running commands
This commit is contained in:
parent
2c8267bf3d
commit
bb7da7844f
|
@ -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.
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Reference in New Issue