[Python-checkins] cpython (2.7): Issue #23375: Fix test_py3kwarn for modules implemented in C

victor.stinner python-checkins at python.org
Thu Sep 3 10:49:21 CEST 2015


https://hg.python.org/cpython/rev/d739bc20d7b2
changeset:   97611:d739bc20d7b2
branch:      2.7
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Thu Sep 03 10:46:17 2015 +0200
summary:
  Issue #23375: Fix test_py3kwarn for modules implemented in C

Don't check if importing a module emits a DeprecationWarning if the module is
implemented in C and the module is already loaded.

files:
  Lib/test/test_py3kwarn.py |  16 ++++++++++++++++
  1 files changed, 16 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_py3kwarn.py b/Lib/test/test_py3kwarn.py
--- a/Lib/test/test_py3kwarn.py
+++ b/Lib/test/test_py3kwarn.py
@@ -2,6 +2,7 @@
 import sys
 from test.test_support import check_py3k_warnings, CleanImport, run_unittest
 import warnings
+from test import test_support
 
 if not sys.py3kwarning:
     raise unittest.SkipTest('%s must be run with the -3 flag' % __name__)
@@ -356,6 +357,21 @@
     def check_removal(self, module_name, optional=False):
         """Make sure the specified module, when imported, raises a
         DeprecationWarning and specifies itself in the message."""
+        if module_name in sys.modules:
+            mod = sys.modules[module_name]
+            filename = getattr(mod, '__file__', '')
+            mod = None
+            # the module is not implemented in C?
+            if not filename.endswith(('.py', '.pyc', '.pyo')):
+                # Issue #23375: If the module was already loaded, reimporting
+                # the module will not emit again the warning. The warning is
+                # emited when the module is loaded, but C modules cannot
+                # unloaded.
+                if test_support.verbose:
+                    print("Cannot test the Python 3 DeprecationWarning of the "
+                          "%s module, the C module is already loaded"
+                          % module_name)
+                return
         with CleanImport(module_name), warnings.catch_warnings():
             warnings.filterwarnings("error", ".+ (module|package) .+ removed",
                                     DeprecationWarning, __name__)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list