[Python-checkins] cpython (merge 3.4 -> default): Issue #18473: Fixed pickle compatibility tests for optional modules.

serhiy.storchaka python-checkins at python.org
Tue Mar 31 15:58:21 CEST 2015


https://hg.python.org/cpython/rev/29b2b2d8e36f
changeset:   95328:29b2b2d8e36f
parent:      95326:ec6c812fbc1f
parent:      95327:5c5eb374e296
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Tue Mar 31 16:49:48 2015 +0300
summary:
  Issue #18473: Fixed pickle compatibility tests for optional modules.
Added WindowsError to compatibility mappings.

files:
  Lib/_compat_pickle.py   |   7 +++++
  Lib/test/test_pickle.py |  35 ++++++++++++++++++++--------
  2 files changed, 32 insertions(+), 10 deletions(-)


diff --git a/Lib/_compat_pickle.py b/Lib/_compat_pickle.py
--- a/Lib/_compat_pickle.py
+++ b/Lib/_compat_pickle.py
@@ -141,6 +141,13 @@
     "ZeroDivisionError",
 )
 
+try:
+    WindowsError
+except NameError:
+    pass
+else:
+    PYTHON2_EXCEPTIONS += ("WindowsError",)
+
 for excname in PYTHON2_EXCEPTIONS:
     NAME_MAPPING[("exceptions", excname)] = ("builtins", excname)
 
diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py
--- a/Lib/test/test_pickle.py
+++ b/Lib/test/test_pickle.py
@@ -240,7 +240,16 @@
     try:
         return sys.modules[module]
     except KeyError:
-        __import__(module)
+        try:
+            __import__(module)
+        except AttributeError as exc:
+            if support.verbose:
+                print("Can't import module %r: %s" % (module, exc))
+            raise ImportError
+        except ImportError as exc:
+            if support.verbose:
+                print(exc)
+            raise
         return sys.modules[module]
 
 def getattribute(module, name):
@@ -264,18 +273,16 @@
         for module in modules:
             try:
                 getmodule(module)
-            except ImportError as exc:
-                if support.verbose:
-                    print(exc)
+            except ImportError:
+                pass
 
     def test_import_mapping(self):
         for module3, module2 in REVERSE_IMPORT_MAPPING.items():
             with self.subTest((module3, module2)):
                 try:
                     getmodule(module3)
-                except ImportError as exc:
-                    if support.verbose:
-                        print(exc)
+                except ImportError:
+                    pass
                 if module3[:1] != '_':
                     self.assertIn(module2, IMPORT_MAPPING)
                     self.assertEqual(IMPORT_MAPPING[module2], module3)
@@ -283,14 +290,19 @@
     def test_name_mapping(self):
         for (module3, name3), (module2, name2) in REVERSE_NAME_MAPPING.items():
             with self.subTest(((module3, name3), (module2, name2))):
-                attr = getattribute(module3, name3)
                 if (module2, name2) == ('exceptions', 'OSError'):
+                    attr = getattribute(module3, name3)
                     self.assertTrue(issubclass(attr, OSError))
                 else:
                     module, name = mapping(module2, name2)
                     if module3[:1] != '_':
                         self.assertEqual((module, name), (module3, name3))
-                    self.assertEqual(getattribute(module, name), attr)
+                    try:
+                        attr = getattribute(module3, name3)
+                    except ImportError:
+                        pass
+                    else:
+                        self.assertEqual(getattribute(module, name), attr)
 
     def test_reverse_import_mapping(self):
         for module2, module3 in IMPORT_MAPPING.items():
@@ -315,7 +327,10 @@
     def test_reverse_name_mapping(self):
         for (module2, name2), (module3, name3) in NAME_MAPPING.items():
             with self.subTest(((module2, name2), (module3, name3))):
-                attr = getattribute(module3, name3)
+                try:
+                    attr = getattribute(module3, name3)
+                except ImportError:
+                    pass
                 module, name = reverse_mapping(module3, name3)
                 if (module2, name2, module3, name3) not in ALT_NAME_MAPPING:
                     self.assertEqual((module, name), (module2, name2))

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


More information about the Python-checkins mailing list