Commit 5949c211 authored by Claude Paroz's avatar Claude Paroz
Browse files

Restored command error behavior when called from command line

Refs #19973.
parent 2ca5fc55
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -52,10 +52,13 @@ class CommandParser(ArgumentParser):
        # Catch missing argument for a better error message
        if (hasattr(self.cmd, 'missing_args_message') and
                not (args or any([not arg.startswith('-') for arg in args]))):
            raise CommandError("Error: %s" % self.cmd.missing_args_message)
            self.error(self.cmd.missing_args_message)
        return super(CommandParser, self).parse_args(args, namespace)

    def error(self, message):
        if self.cmd._called_from_command_line:
            super(CommandParser, self).error(message)
        else:
            raise CommandError("Error: %s" % message)


@@ -208,6 +211,7 @@ class BaseCommand(object):
    args = ''

    # Configuration shortcuts that alter various logic.
    _called_from_command_line = False
    can_import_settings = True
    output_transaction = False  # Whether to wrap the output in a "BEGIN; COMMIT;"
    leave_locale_alone = False
@@ -338,6 +342,7 @@ class BaseCommand(object):
        to stderr. If the ``--traceback`` option is present or the raised
        ``Exception`` is not ``CommandError``, raise it.
        """
        self._called_from_command_line = True
        parser = self.create_parser(argv[0], argv[1])

        if self.use_argparse:
+4 −3
Original line number Diff line number Diff line
@@ -1494,7 +1494,7 @@ class CommandTypes(AdminScriptTestCase):
        "NoArg Commands raise an error if an argument is provided"
        args = ['noargs_command', 'argument']
        out, err = self.run_manage(args)
        self.assertOutput(err, "Error: unrecognized arguments: argument")
        self.assertOutput(err, "error: unrecognized arguments: argument")

    def test_app_command(self):
        "User AppCommands can execute when a single app name is provided"
@@ -1508,7 +1508,7 @@ class CommandTypes(AdminScriptTestCase):
        "User AppCommands raise an error when no app name is provided"
        args = ['app_command']
        out, err = self.run_manage(args)
        self.assertOutput(err, 'Error: Enter at least one application label.')
        self.assertOutput(err, 'error: Enter at least one application label.')

    def test_app_command_multiple_apps(self):
        "User AppCommands raise an error when multiple app names are provided"
@@ -1642,9 +1642,10 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
    ]

    def test_wrong_args(self):
        "Make sure passing the wrong kinds of arguments raises a CommandError"
        "Make sure passing the wrong kinds of arguments outputs an error and prints usage"
        out, err = self.run_django_admin(['startproject'])
        self.assertNoOutput(out)
        self.assertOutput(err, "usage:")
        self.assertOutput(err, "You must provide a project name.")

    def test_simple_project(self):