Fixed #23685 -- Made call_command skip checks by default

Thanks Loic Bistuer for the report/review and Tim Graham for the
review.
This commit is contained in:
Claude Paroz 2014-10-19 21:17:38 +02:00
parent a39df37049
commit 685edab9da
4 changed files with 29 additions and 3 deletions

View File

@ -114,6 +114,8 @@ def call_command(name, *args, **options):
# Legacy optparse method
defaults, _ = parser.parse_args(args=[])
defaults = dict(defaults.__dict__, **options)
if 'skip_checks' not in options:
defaults['skip_checks'] = True
return command.execute(*args, **defaults)

View File

@ -634,6 +634,9 @@ Miscellaneous
class name found in the :setting:`BACKEND <CACHES-BACKEND>` key of the
:setting:`CACHES` setting.
* By default, :ref:`call_command <call-command>` now always skips the check
framework (unless you pass it ``skip_checks=False``).
.. _deprecated-features-1.8:
Features deprecated in 1.8

View File

@ -15,5 +15,6 @@ class Command(BaseCommand):
example = options["example"]
if example == "raise":
raise CommandError()
self.stdout.write("I don't feel like dancing %s." % options["style"])
self.stdout.write(','.join(options.keys()))
if options['verbosity'] > 0:
self.stdout.write("I don't feel like dancing %s." % options["style"])
self.stdout.write(','.join(options.keys()))

View File

@ -4,7 +4,7 @@ import warnings
from django.db import connection
from django.core import management
from django.core.management import CommandError
from django.core.management import BaseCommand, CommandError
from django.core.management.utils import find_command, popen_wrapper
from django.test import SimpleTestCase
from django.utils import translation
@ -136,6 +136,26 @@ class CommandTests(SimpleTestCase):
self.assertTrue(output.startswith(connection.ops.start_transaction_sql()))
self.assertTrue(output.endswith(connection.ops.end_transaction_sql()))
def test_call_command_no_checks(self):
"""
By default, call_command should not trigger the check framework, unless
specifically asked.
"""
self.counter = 0
def patched_check(self_, **kwargs):
self.counter = self.counter + 1
saved_check = BaseCommand.check
BaseCommand.check = patched_check
try:
management.call_command("dance", verbosity=0)
self.assertEqual(self.counter, 0)
management.call_command("dance", verbosity=0, skip_checks=False)
self.assertEqual(self.counter, 1)
finally:
BaseCommand.check = saved_check
class UtilsTests(SimpleTestCase):