diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py index 0502489d4e..047e822e1a 100644 --- a/django/core/management/__init__.py +++ b/django/core/management/__init__.py @@ -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) diff --git a/docs/releases/1.8.txt b/docs/releases/1.8.txt index 63513780ad..8fb6b1ec26 100644 --- a/docs/releases/1.8.txt +++ b/docs/releases/1.8.txt @@ -634,6 +634,9 @@ Miscellaneous class name found in the :setting:`BACKEND ` key of the :setting:`CACHES` setting. +* By default, :ref:`call_command ` now always skips the check + framework (unless you pass it ``skip_checks=False``). + .. _deprecated-features-1.8: Features deprecated in 1.8 diff --git a/tests/user_commands/management/commands/dance.py b/tests/user_commands/management/commands/dance.py index e27042f9d4..0fc82724f4 100644 --- a/tests/user_commands/management/commands/dance.py +++ b/tests/user_commands/management/commands/dance.py @@ -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())) diff --git a/tests/user_commands/tests.py b/tests/user_commands/tests.py index 32224ef277..25d1ad7c33 100644 --- a/tests/user_commands/tests.py +++ b/tests/user_commands/tests.py @@ -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):