Commit bb7da784 authored by Claude Paroz's avatar Claude Paroz
Browse files

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

parent 2c8267bf
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -103,10 +103,12 @@ def get_commands():
        _commands = dict([(name, 'django.core') for name in find_commands(__path__[0])])

        # Find the installed apps
        try:
        from django.conf import settings
        try:
            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.
+17 −4
Original line number Diff line number Diff line
@@ -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')