[Python-checkins] bpo-41003: Fix test_copyreg when numpy is installed (GH-20935) (GH-20945) (GH-20946)

Victor Stinner webhook-mailer at python.org
Wed Jun 17 13:09:58 EDT 2020


https://github.com/python/cpython/commit/3d974b2fc681ddd0ec722cf631008d5941da52b8
commit: 3d974b2fc681ddd0ec722cf631008d5941da52b8
branch: 3.8
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-06-17T19:09:49+02:00
summary:

bpo-41003: Fix test_copyreg when numpy is installed (GH-20935) (GH-20945) (GH-20946)

Fix test_copyreg when numpy is installed: test.pickletester now
saves/restores warnings.filters when importing numpy, to ignore
filters installed by numpy.

Add the save_restore_warnings_filters() function to the
test.support.warnings_helper module.

(cherry picked from commit 8362893e3fe083df2ec8bb94c28b1a78383eadbf)
(cherry picked from commit b39d41ba1b77f7bc51c4d6f6d0e336693192cb3a)

files:
A Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst
M Lib/distutils/tests/__init__.py
M Lib/test/pickletester.py
M Lib/test/support/__init__.py

diff --git a/Lib/distutils/tests/__init__.py b/Lib/distutils/tests/__init__.py
index 5d2e69e3e6a8f..68037216c7d06 100644
--- a/Lib/distutils/tests/__init__.py
+++ b/Lib/distutils/tests/__init__.py
@@ -15,26 +15,24 @@
 import os
 import sys
 import unittest
-import warnings
-from test.support import run_unittest
+from test.support import run_unittest, save_restore_warnings_filters
 
 
 here = os.path.dirname(__file__) or os.curdir
 
 
 def test_suite():
-    old_filters = warnings.filters[:]
     suite = unittest.TestSuite()
     for fn in os.listdir(here):
         if fn.startswith("test") and fn.endswith(".py"):
             modname = "distutils.tests." + fn[:-3]
-            __import__(modname)
+            # bpo-40055: Save/restore warnings filters to leave them unchanged.
+            # Importing tests imports docutils which imports pkg_resources
+            # which adds a warnings filter.
+            with save_restore_warnings_filters():
+                __import__(modname)
             module = sys.modules[modname]
             suite.addTest(module.test_suite())
-    # bpo-40055: Save/restore warnings filters to leave them unchanged.
-    # Importing tests imports docutils which imports pkg_resources which adds a
-    # warnings filter.
-    warnings.filters[:] = old_filters
     return suite
 
 
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 7c8383f3eaac9..9401043d78d18 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -21,19 +21,25 @@
 except ImportError:
     _testbuffer = None
 
-try:
-    import numpy as np
-except ImportError:
-    np = None
-
 from test import support
 from test.support import (
     TestFailed, TESTFN, run_with_locale, no_tracing,
     _2G, _4G, bigmemtest, reap_threads, forget,
+    save_restore_warnings_filters
     )
 
 from pickle import bytes_types
 
+
+# bpo-41003: Save/restore warnings filters to leave them unchanged.
+# Ignore filters installed by numpy.
+try:
+    with save_restore_warnings_filters():
+        import numpy as np
+except ImportError:
+    np = None
+
+
 requires_32b = unittest.skipUnless(sys.maxsize < 2**32,
                                    "test is only meaningful on 32-bit builds")
 
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 08d53ec7064b4..0906e7adbae9b 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3368,3 +3368,12 @@ def __exit__(self, *exc_info):
         del self.exc_value
         del self.exc_traceback
         del self.thread
+
+
+ at contextlib.contextmanager
+def save_restore_warnings_filters():
+    old_filters = warnings.filters[:]
+    try:
+        yield
+    finally:
+        warnings.filters[:] = old_filters
diff --git a/Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst b/Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst
new file mode 100644
index 0000000000000..6f908d99feaf7
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst
@@ -0,0 +1,3 @@
+Fix ``test_copyreg`` when ``numpy`` is installed: ``test.pickletester`` now
+saves/restores warnings filters when importing ``numpy``, to ignore filters
+installed by ``numpy``.



More information about the Python-checkins mailing list