diff options
| author | Claude Paroz <claude@2xlibre.net> | 2012-09-26 15:07:11 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2012-09-26 15:07:11 +0200 |
| commit | bb7da7844ff9f11286509c22a2549bbd4553d58d (patch) | |
| tree | 157b402708bfe1fbb4db9e78ac5035c9e164d6aa | |
| parent | 2c8267bf3db608b99c04ae903c424b60cafaaf93 (diff) | |
Fixed #18845 -- Do not swallow AttributeErrors when running commands
| -rw-r--r-- | django/core/management/__init__.py | 6 | ||||
| -rw-r--r-- | tests/regressiontests/admin_scripts/tests.py | 21 |
2 files changed, 21 insertions, 6 deletions
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py index b40570efc9..c61ab2b663 100644 --- a/django/core/management/__init__.py +++ b/django/core/management/__init__.py @@ -103,10 +103,12 @@ def get_commands(): _commands = dict([(name, 'django.core') for name in find_commands(__path__[0])]) # Find the installed apps + from django.conf import settings try: - from django.conf import settings apps = settings.INSTALLED_APPS - except (AttributeError, ImproperlyConfigured): + except ImproperlyConfigured: + # Still useful for commands that do not require functional settings, + # like startproject or help apps = [] # Find and load the management module for each installed app. diff --git a/tests/regressiontests/admin_scripts/tests.py b/tests/regressiontests/admin_scripts/tests.py index 6028eac846..6f524bea29 100644 --- a/tests/regressiontests/admin_scripts/tests.py +++ b/tests/regressiontests/admin_scripts/tests.py @@ -982,13 +982,11 @@ class ManageMultipleSettings(AdminScriptTestCase): self.assertNoOutput(err) self.assertOutput(out, "EXECUTE:NoArgsCommand") + class ManageSettingsWithImportError(AdminScriptTestCase): """Tests for manage.py when using the default settings.py file with an import error. Ticket #14130. """ - def setUp(self): - self.write_settings_with_import_error('settings.py') - def tearDown(self): 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') 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'] out, err = self.run_manage(args) self.assertNoOutput(out) 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): def tearDown(self): self.remove_settings('settings.py') |
