Fixed #25483 -- Allowed passing non-string arguments to call_command

Thanks KS Chan for the report and Tim Graham for the review.
This commit is contained in:
Claude Paroz 2015-10-03 09:58:36 +02:00
parent fa2e1e633a
commit 3f22e83e90
3 changed files with 13 additions and 1 deletions

View file

@ -7,6 +7,7 @@ class Command(BaseCommand):
requires_system_checks = True
def add_arguments(self, parser):
parser.add_argument("integer", nargs='?', type=int, default=0)
parser.add_argument("-s", "--style", default="Rock'n'Roll")
parser.add_argument("-x", "--example")
parser.add_argument("--opt-3", action='store_true', dest='option3')
@ -18,3 +19,5 @@ class Command(BaseCommand):
if options['verbosity'] > 0:
self.stdout.write("I don't feel like dancing %s." % options["style"])
self.stdout.write(','.join(options.keys()))
if options['integer'] > 0:
self.stdout.write("You passed %d as a positional argument." % options['integer'])

View file

@ -103,6 +103,14 @@ class CommandTests(SimpleTestCase):
self.assertNotIn("opt_3", out.getvalue())
self.assertNotIn("opt-3", out.getvalue())
def test_call_command_option_parsing_non_string_arg(self):
"""
It should be possible to pass non-string arguments to call_command.
"""
out = StringIO()
management.call_command('dance', 1, verbosity=0, stdout=out)
self.assertIn("You passed 1 as a positional argument.", out.getvalue())
def test_calling_a_command_with_only_empty_parameter_should_ends_gracefully(self):
out = StringIO()
management.call_command('hal', "--empty", stdout=out)