]> granicus.if.org Git - python/commitdiff
Allow importlib.__import__ to accept any iterable for fromlist. Discovered when
authorBrett Cannon <bcannon@gmail.com>
Sun, 30 Aug 2009 18:28:46 +0000 (18:28 +0000)
committerBrett Cannon <bcannon@gmail.com>
Sun, 30 Aug 2009 18:28:46 +0000 (18:28 +0000)
running importlib against test___all__.

Lib/importlib/_bootstrap.py
Lib/importlib/test/import_/test_fromlist.py
Misc/NEWS

index 079a9b275f7ef71e86ee11cc68dc43312755e974..95fea3365ed8be2f3e0b420301bed6a64ef08923 100644 (file)
@@ -943,6 +943,7 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0):
         # If a package was imported, try to import stuff from fromlist.
         if hasattr(module, '__path__'):
             if '*' in fromlist and hasattr(module, '__all__'):
+                fromlist = list(fromlist)
                 fromlist.remove('*')
                 fromlist.extend(module.__all__)
             for x in (y for y in fromlist if not hasattr(module,y)):
index 340235be31ec41f6065ebbabd6ae9ee791355664..14ea5bfddee79cca0048f1c532ff103ac37131b4 100644 (file)
@@ -84,16 +84,23 @@ class HandlingFromlist(unittest.TestCase):
                 module = import_util.import_('pkg.mod', fromlist=[''])
                 self.assertEquals(module.__name__, 'pkg.mod')
 
-    def test_using_star(self):
+    def basic_star_test(self, fromlist=['*']):
         # [using *]
         with util.mock_modules('pkg.__init__', 'pkg.module') as mock:
             with util.import_state(meta_path=[mock]):
                 mock['pkg'].__all__ = ['module']
-                module = import_util.import_('pkg', fromlist=['*'])
+                module = import_util.import_('pkg', fromlist=fromlist)
                 self.assertEquals(module.__name__, 'pkg')
                 self.assertTrue(hasattr(module, 'module'))
                 self.assertEqual(module.module.__name__, 'pkg.module')
 
+    def test_using_star(self):
+        # [using *]
+        self.basic_star_test()
+
+    def test_fromlist_as_tuple(self):
+        self.basic_star_test(('*',))
+
     def test_star_with_others(self):
         # [using * with others]
         context = util.mock_modules('pkg.__init__', 'pkg.module1', 'pkg.module2')
index 5189aae4ecef5ad988323eb05c759bf152c1b22c..d6d7dc3187a02344cd2e6e9c6f9673b190d3a128 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -68,6 +68,8 @@ C-API
 Library
 -------
 
+- Allow the fromlist passed into importlib.__import__ to be any iterable.
+
 - Have importlib raise ImportError if None is found in sys.modules.
 
 - Issue #6054: Do not normalize stored pathnames in tarfile.