[Python-checkins] cpython (3.3): Issue #17098: Be more stringent of setting __loader__ on early imported

brett.cannon python-checkins at python.org
Fri Feb 1 22:38:03 CET 2013


http://hg.python.org/cpython/rev/19ea454ccdf7
changeset:   81884:19ea454ccdf7
branch:      3.3
parent:      81882:4a4688b865ff
user:        Brett Cannon <brett at python.org>
date:        Fri Feb 01 15:31:49 2013 -0500
summary:
  Issue #17098: Be more stringent of setting __loader__ on early imported
modules. Also made test more rigorous.

files:
  Lib/importlib/_bootstrap.py         |    7 +-
  Lib/test/test_importlib/test_api.py |    6 +
  Python/importlib.h                  |  591 ++++++++-------
  3 files changed, 310 insertions(+), 294 deletions(-)


diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -1704,10 +1704,13 @@
         BYTECODE_SUFFIXES = DEBUG_BYTECODE_SUFFIXES
 
     module_type = type(sys)
-    for module in sys.modules.values():
+    for name, module in sys.modules.items():
         if isinstance(module, module_type):
             if not hasattr(module, '__loader__'):
-                module.__loader__ = BuiltinImporter
+                if name in sys.builtin_module_names:
+                    module.__loader__ = BuiltinImporter
+                elif _imp.is_frozen(name):
+                    module.__loader__ = FrozenImporter
 
     self_module = sys.modules[__name__]
     for builtin_name in ('_io', '_warnings', 'builtins', 'marshal'):
diff --git a/Lib/test/test_importlib/test_api.py b/Lib/test/test_importlib/test_api.py
--- a/Lib/test/test_importlib/test_api.py
+++ b/Lib/test/test_importlib/test_api.py
@@ -184,6 +184,12 @@
             if isinstance(module, types.ModuleType):
                 self.assertTrue(hasattr(module, '__loader__'),
                         '{!r} lacks a __loader__ attribute'.format(name))
+                if name in sys.builtin_module_names:
+                    self.assertEqual(importlib.machinery.BuiltinImporter,
+                                     module.__loader__)
+                elif imp.is_frozen(name):
+                    self.assertEqual(importlib.machinery.FrozenImporter,
+                                     module.__loader__)
 
 def test_main():
     from test.support import run_unittest
diff --git a/Python/importlib.h b/Python/importlib.h
--- a/Python/importlib.h
+++ b/Python/importlib.h
[stripped]

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


More information about the Python-checkins mailing list