mirror of https://github.com/django/django.git
[1.8.x] 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 in8568638
(#19973). Initial report and patch from blueyed. Backport ofa0047c6242
from master
This commit is contained in:
parent
8bc18ebf0f
commit
76c526f80e
|
@ -300,6 +300,9 @@ class BaseCommand(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not self.use_argparse:
|
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
|
# Backwards compatibility: use deprecated optparse module
|
||||||
warnings.warn("OptionParser usage for Django management commands "
|
warnings.warn("OptionParser usage for Django management commands "
|
||||||
"is deprecated, use ArgumentParser instead",
|
"is deprecated, use ArgumentParser instead",
|
||||||
|
@ -307,8 +310,8 @@ class BaseCommand(object):
|
||||||
parser = OptionParser(prog=prog_name,
|
parser = OptionParser(prog=prog_name,
|
||||||
usage=self.usage(subcommand),
|
usage=self.usage(subcommand),
|
||||||
version=self.get_version())
|
version=self.get_version())
|
||||||
parser.add_option('-v', '--verbosity', action='store', dest='verbosity', default='1',
|
parser.add_option('-v', '--verbosity', action='callback', dest='verbosity', default=1,
|
||||||
type='choice', choices=['0', '1', '2', '3'],
|
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')
|
help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output')
|
||||||
parser.add_option('--settings',
|
parser.add_option('--settings',
|
||||||
help=(
|
help=(
|
||||||
|
|
|
@ -62,3 +62,7 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed ``SimpleTestCase.assertRaisesMessage()`` on Python 2.7.10
|
* Fixed ``SimpleTestCase.assertRaisesMessage()`` on Python 2.7.10
|
||||||
(:ticket:`24903`).
|
(:ticket:`24903`).
|
||||||
|
|
||||||
|
* Provided better backwards compatibility for the ``verbosity`` argument in
|
||||||
|
``optparse`` management commands by casting it to an integer
|
||||||
|
(:ticket:`24769`).
|
||||||
|
|
|
@ -16,4 +16,5 @@ class Command(BaseCommand):
|
||||||
options["example"]
|
options["example"]
|
||||||
# BaseCommand default option is available
|
# BaseCommand default option is available
|
||||||
options['verbosity']
|
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"])
|
self.stdout.write("All right, let's dance %s." % options["style"])
|
||||||
|
|
Loading…
Reference in New Issue