Commit 572a300e authored by Preston Holmes's avatar Preston Holmes Committed by Jacob Kaplan-Moss
Browse files

[1.5.x] Fixed #18985 -- ensure module level deprecations are displayed

Also don't compete with -W CLI option.

Thanks to Aymeric Augustin for the catch, and Claude Paroz for the patch.

Backport of e79b857a from master.
parent 456d6c15
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ a list of all possible variables.

import logging
import os
import sys
import time     # Needed for Windows
import warnings

@@ -56,6 +57,7 @@ class LazySettings(LazyObject):
        """
        Setup logging from LOGGING_CONFIG and LOGGING settings.
        """
        if not sys.warnoptions:
            try:
                # Route warnings through python logging
                logging.captureWarnings(True)
+17 −0
Original line number Diff line number Diff line
import logging
import sys
import os
from optparse import make_option, OptionParser
@@ -6,6 +7,7 @@ from django.conf import settings
from django.core.management.base import BaseCommand
from django.test.utils import get_runner


class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--noinput',
@@ -57,6 +59,21 @@ class Command(BaseCommand):
                            version=self.get_version(),
                            option_list=options)

    def execute(self, *args, **options):
        if int(options['verbosity']) > 0:
            # ensure that deprecation warnings are displayed during testing
            # the following state is assumed:
            # logging.capturewarnings is true
            # a "default" level warnings filter has been added for
            # DeprecationWarning. See django.conf.LazySettings._configure_logging
            logger = logging.getLogger('py.warnings')
            handler = logging.StreamHandler()
            logger.addHandler(handler)
        super(Command, self).execute(*args, **options)
        if int(options['verbosity']) > 0:
            # remove the testing-specific handler
            logger.removeHandler(handler)

    def handle(self, *test_labels, **options):
        from django.conf import settings
        from django.test.utils import get_runner
+0 −13
Original line number Diff line number Diff line
import logging
import unittest as real_unittest

from django.conf import settings
@@ -366,19 +365,7 @@ class DjangoTestSuiteRunner(object):
        self.setup_test_environment()
        suite = self.build_suite(test_labels, extra_tests)
        old_config = self.setup_databases()
        if self.verbosity > 0:
            # ensure that deprecation warnings are displayed during testing
            # the following state is assumed:
            # logging.capturewarnings is true
            # a "default" level warnings filter has been added for
            # DeprecationWarning. See django.conf.LazySettings._configure_logging
            logger = logging.getLogger('py.warnings')
            handler = logging.StreamHandler()
            logger.addHandler(handler)
        result = self.run_suite(suite)
        if self.verbosity > 0:
            # remove the testing-specific handler
            logger.removeHandler(handler)
        self.teardown_databases(old_config)
        self.teardown_test_environment()
        return self.suite_result(suite, result)
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@ import warnings

from django.test import TestCase

warnings.warn("module-level warning from deprecation_app", DeprecationWarning)

class DummyTest(TestCase):
    def test_warn(self):
        warnings.warn("warning from test", DeprecationWarning)
+2 −1
Original line number Diff line number Diff line
@@ -298,7 +298,8 @@ class DeprecationDisplayTest(AdminScriptTestCase):
    def test_runner_deprecation_verbosity_default(self):
        args = ['test', '--settings=regressiontests.settings']
        out, err = self.run_django_admin(args)
        self.assertTrue("DeprecationWarning: warning from test" in err)
        self.assertIn("DeprecationWarning: warning from test", err)
        self.assertIn("DeprecationWarning: module-level warning from deprecation_app", err)

    @unittest.skipIf(sys.version_info[:2] == (2, 6),
        "On Python 2.6, DeprecationWarnings are visible anyway")
Loading