Commit 7947c9e3 authored by Ramiro Morales's avatar Ramiro Morales
Browse files

Deprecated undocumented warnings manipulation testing tools.

parent 9a4a1ce3
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
from __future__ import unicode_literals

from copy import copy
import difflib
import errno
from functools import wraps
import json
import os
import re
import sys
from copy import copy
from functools import wraps
try:
    from urllib.parse import urlsplit, urlunsplit
except ImportError:     # Python 2
@@ -14,7 +15,7 @@ except ImportError: # Python 2
import select
import socket
import threading
import errno
import warnings

from django.conf import settings
from django.contrib.staticfiles.handlers import StaticFilesHandler
@@ -36,8 +37,7 @@ from django.test import _doctest as doctest
from django.test.client import Client
from django.test.html import HTMLParseError, parse_html
from django.test.signals import template_rendered
from django.test.utils import (get_warnings_state, restore_warnings_state,
    override_settings, compare_xml, strip_quotes)
from django.test.utils import (override_settings, compare_xml, strip_quotes)
from django.test.utils import ContextList
from django.utils import unittest as ut2
from django.utils.encoding import force_text
@@ -241,6 +241,11 @@ class _AssertTemplateNotUsedContext(_AssertTemplateUsedContext):


class SimpleTestCase(ut2.TestCase):

    _warn_txt = ("save_warnings_state/restore_warnings_state "
        "django.test.*TestCase methods are deprecated. Use Python's "
        "warnings.catch_warnings context manager instead.")

    def __call__(self, result=None):
        """
        Wrapper around default __call__ method to perform common Django test
@@ -279,14 +284,16 @@ class SimpleTestCase(ut2.TestCase):
        """
        Saves the state of the warnings module
        """
        self._warnings_state = get_warnings_state()
        warnings.warn(self._warn_txt, DeprecationWarning, stacklevel=2)
        self._warnings_state = warnings.filters[:]

    def restore_warnings_state(self):
        """
        Restores the state of the warnings module to the state
        saved by save_warnings_state()
        """
        restore_warnings_state(self._warnings_state)
        warnings.warn(self._warn_txt, DeprecationWarning, stacklevel=2)
        warnings.filters = self._warnings_state[:]

    def settings(self, **kwargs):
        """
+7 −0
Original line number Diff line number Diff line
@@ -98,6 +98,11 @@ def teardown_test_environment():
    del mail.outbox


warn_txt = ("get_warnings_state/restore_warnings_state functions from "
    "django.test.utils are deprecated. Use Python's warnings.catch_warnings() "
    "context manager instead.")


def get_warnings_state():
    """
    Returns an object containing the state of the warnings module
@@ -105,6 +110,7 @@ def get_warnings_state():
    # There is no public interface for doing this, but this implementation of
    # get_warnings_state and restore_warnings_state appears to work on Python
    # 2.4 to 2.7.
    warnings.warn(warn_txt, DeprecationWarning, stacklevel=2)
    return warnings.filters[:]


@@ -113,6 +119,7 @@ def restore_warnings_state(state):
    Restores the state of the warnings module when passed an object that was
    returned by get_warnings_state()
    """
    warnings.warn(warn_txt, DeprecationWarning, stacklevel=2)
    warnings.filters = state[:]


+7 −1
Original line number Diff line number Diff line
@@ -267,7 +267,6 @@ these changes.
  in 1.4. The backward compatibility will be removed --
  ``HttpRequest.raw_post_data`` will no longer work.


* The value for the ``post_url_continue`` parameter in
  ``ModelAdmin.response_add()`` will have to be either ``None`` (to redirect
  to the newly created object's edit page) or a pre-formatted url. String
@@ -314,6 +313,13 @@ these changes.
* The ``depth`` keyword argument will be removed from
  :meth:`~django.db.models.query.QuerySet.select_related`.

* The undocumented ``get_warnings_state()``/``restore_warnings_state()``
  functions from :mod:`django.test.utils` and the ``save_warnings_state()``/
  ``restore_warnings_state()``
  :ref:`django.test.*TestCase <django-testcase-subclasses>` methods are
  deprecated. Use the :class:`warnings.catch_warnings` context manager
  available starting with Python 2.6 instead.

1.8
---

+2 −0
Original line number Diff line number Diff line
@@ -835,6 +835,8 @@ The following is a simple unit test using the test client::

    :class:`django.test.client.RequestFactory`

.. _django-testcase-subclasses:

Provided test case classes
--------------------------

+17 −14
Original line number Diff line number Diff line
@@ -220,6 +220,9 @@ class SaveRestoreWarningState(TestCase):
        # of save_warnings_state/restore_warnings_state (e.g. just
        # warnings.resetwarnings()) , but it is difficult to test more.
        import warnings
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)

            self.save_warnings_state()

            class MyWarning(Warning):