Commit a0047c62 authored by Rivo Laks's avatar Rivo Laks Committed by Tim Graham
Browse files

Fixed #24769 -- Cast optparse verbosity argument to an integer for better backwards compatibility.

Using `BaseCommand.options_list` makes Django use the legacy optparse
parser, which does not set the verbosity attribute correctly. Now the
verbosity argument is always cast to int. Regression in 85686386 (#19973).

Initial report and patch from blueyed.
parent 90c59db7
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -257,6 +257,9 @@ class BaseCommand(object):

        """
        if not self.use_argparse:
            def store_as_int(option, opt_str, value, parser):
                setattr(parser.values, option.dest, int(value))

            # Backwards compatibility: use deprecated optparse module
            warnings.warn("OptionParser usage for Django management commands "
                          "is deprecated, use ArgumentParser instead",
@@ -264,8 +267,8 @@ class BaseCommand(object):
            parser = OptionParser(prog=prog_name,
                                usage=self.usage(subcommand),
                                version=self.get_version())
            parser.add_option('-v', '--verbosity', action='store', dest='verbosity', default='1',
                type='choice', choices=['0', '1', '2', '3'],
            parser.add_option('-v', '--verbosity', action='callback', dest='verbosity', default=1,
                type='choice', choices=['0', '1', '2', '3'], callback=store_as_int,
                help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output')
            parser.add_option('--settings',
                help=(
+4 −0
Original line number Diff line number Diff line
@@ -62,3 +62,7 @@ Bugfixes

* Fixed ``SimpleTestCase.assertRaisesMessage()`` on Python 2.7.10
  (:ticket:`24903`).

* Provided better backwards compatibility for the ``verbosity`` argument in
  ``optparse`` management commands by casting it to an integer
  (:ticket:`24769`).
+1 −0
Original line number Diff line number Diff line
@@ -16,4 +16,5 @@ class Command(BaseCommand):
        options["example"]
        # BaseCommand default option is available
        options['verbosity']
        assert isinstance(options['verbosity'], int), "verbosity option is not int, but %s" % type(options['verbosity'])
        self.stdout.write("All right, let's dance %s." % options["style"])