mirror of
https://github.com/django/django.git
synced 2025-08-04 02:48:35 +00:00
Fixed #19923 -- Display tracebacks for non-CommandError exceptions
By default, show tracebacks for management command errors when the exception is not a CommandError. Thanks Jacob Radford for the report.
This commit is contained in:
parent
5e80571bf9
commit
6a91b63842
3 changed files with 24 additions and 7 deletions
|
@ -16,7 +16,7 @@ import codecs
|
|||
|
||||
from django import conf, bin, get_version
|
||||
from django.conf import settings
|
||||
from django.core.management import BaseCommand
|
||||
from django.core.management import BaseCommand, CommandError
|
||||
from django.db import connection
|
||||
from django.test.simple import DjangoTestSuiteRunner
|
||||
from django.utils import unittest
|
||||
|
@ -1297,22 +1297,34 @@ class CommandTypes(AdminScriptTestCase):
|
|||
Also test proper traceback display.
|
||||
"""
|
||||
command = BaseCommand()
|
||||
command.execute = lambda args: args # This will trigger TypeError
|
||||
def raise_command_error(*args, **kwargs):
|
||||
raise CommandError("Custom error")
|
||||
|
||||
old_stderr = sys.stderr
|
||||
sys.stderr = err = StringIO()
|
||||
try:
|
||||
command.execute = lambda args: args # This will trigger TypeError
|
||||
with self.assertRaises(SystemExit):
|
||||
command.run_from_argv(['', ''])
|
||||
err_message = err.getvalue()
|
||||
# Exceptions other than CommandError automatically output the traceback
|
||||
self.assertIn("Traceback", err_message)
|
||||
self.assertIn("TypeError", err_message)
|
||||
|
||||
command.execute = raise_command_error
|
||||
err.truncate(0)
|
||||
with self.assertRaises(SystemExit):
|
||||
command.run_from_argv(['', ''])
|
||||
err_message = err.getvalue()
|
||||
self.assertNotIn("Traceback", err_message)
|
||||
self.assertIn("TypeError", err_message)
|
||||
self.assertIn("CommandError", err_message)
|
||||
|
||||
err.truncate(0)
|
||||
with self.assertRaises(SystemExit):
|
||||
command.run_from_argv(['', '', '--traceback'])
|
||||
err_message = err.getvalue()
|
||||
self.assertIn("Traceback (most recent call last)", err_message)
|
||||
self.assertIn("TypeError", err_message)
|
||||
self.assertIn("CommandError", err_message)
|
||||
finally:
|
||||
sys.stderr = old_stderr
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue