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 # Legacy optparse method
defaults, _ = parser.parse_args(args=[]) defaults, _ = parser.parse_args(args=[])
defaults = dict(defaults.__dict__, **options) defaults = dict(defaults.__dict__, **options)
if 'skip_checks' not in options:
defaults['skip_checks'] = True
return command.execute(*args, **defaults) return command.execute(*args, **defaults)

View File

@ -634,6 +634,9 @@ Miscellaneous
class name found in the :setting:`BACKEND <CACHES-BACKEND>` key of the class name found in the :setting:`BACKEND <CACHES-BACKEND>` key of the
:setting:`CACHES` setting. :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: .. _deprecated-features-1.8:
Features deprecated in 1.8 Features deprecated in 1.8

View File

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

View File

@ -4,7 +4,7 @@ import warnings
from django.db import connection from django.db import connection
from django.core import management 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.core.management.utils import find_command, popen_wrapper
from django.test import SimpleTestCase from django.test import SimpleTestCase
from django.utils import translation from django.utils import translation
@ -136,6 +136,26 @@ class CommandTests(SimpleTestCase):
self.assertTrue(output.startswith(connection.ops.start_transaction_sql())) self.assertTrue(output.startswith(connection.ops.start_transaction_sql()))
self.assertTrue(output.endswith(connection.ops.end_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): class UtilsTests(SimpleTestCase):