[Python-checkins] cpython: Rename importlib.util.ModuleManager to module_to_load so that the name

brett.cannon python-checkins at python.org
Thu May 30 23:31:56 CEST 2013


http://hg.python.org/cpython/rev/6ace4133c1c0
changeset:   83988:6ace4133c1c0
user:        Brett Cannon <brett at python.org>
date:        Thu May 30 17:31:47 2013 -0400
summary:
  Rename importlib.util.ModuleManager to module_to_load so that the name
explains better what the context manager is providing.

files:
  Doc/library/importlib.rst            |    13 +-
  Lib/importlib/_bootstrap.py          |    11 +-
  Lib/importlib/util.py                |     2 +-
  Lib/test/test_importlib/test_util.py |    14 +-
  Misc/NEWS                            |     4 +-
  Python/importlib.h                   |  7035 +++++++------
  6 files changed, 3550 insertions(+), 3529 deletions(-)


diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -789,12 +789,13 @@
 
    .. versionadded:: 3.3
 
-.. class:: ModuleManager(name)
+.. function:: module_to_load(name)
 
-    A :term:`context manager` which provides the module to load. The module will
-    either come from :attr:`sys.modules` in the case of reloading or a fresh
-    module if loading a new module. Proper cleanup of :attr:`sys.modules` occurs
-    if the module was new and an exception was raised.
+    Returns a :term:`context manager` which provides the module to load. The
+    module will either come from :attr:`sys.modules` in the case of reloading or
+    a fresh module if loading a new module. Proper cleanup of
+    :attr:`sys.modules` occurs if the module was new and an exception was
+    raised.
 
     .. versionadded:: 3.4
 
@@ -823,7 +824,7 @@
     in :data:`sys.modules` then it is left alone.
 
     .. note::
-       :class:`ModuleManager` subsumes the module management aspect of this
+       :func:`module_to_load` subsumes the module management aspect of this
        decorator.
 
     .. versionchanged:: 3.3
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -484,7 +484,8 @@
         print(message.format(*args), file=sys.stderr)
 
 
-class ModuleManager:
+# Written as a class only because contextlib is not available.
+class _ModuleManager:
 
     """Context manager which returns the module to be loaded.
 
@@ -516,6 +517,12 @@
             del sys.modules[self._name]
 
 
+def module_to_load(name):
+    """Return a context manager which provides the module object to load."""
+    # Hiding _ModuleManager behind a function for better naming.
+    return _ModuleManager(name)
+
+
 def set_package(fxn):
     """Set __package__ on the returned module."""
     def set_package_wrapper(*args, **kwargs):
@@ -559,7 +566,7 @@
 
     """
     def module_for_loader_wrapper(self, fullname, *args, **kwargs):
-        with ModuleManager(fullname) as module:
+        with module_to_load(fullname) as module:
             module.__loader__ = self
             try:
                 is_package = self.is_package(fullname)
diff --git a/Lib/importlib/util.py b/Lib/importlib/util.py
--- a/Lib/importlib/util.py
+++ b/Lib/importlib/util.py
@@ -1,6 +1,6 @@
 """Utility code for constructing importers, etc."""
 
-from ._bootstrap import ModuleManager
+from ._bootstrap import module_to_load
 from ._bootstrap import module_for_loader
 from ._bootstrap import set_loader
 from ._bootstrap import set_package
diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py
--- a/Lib/test/test_importlib/test_util.py
+++ b/Lib/test/test_importlib/test_util.py
@@ -7,7 +7,7 @@
 import unittest
 
 
-class ModuleManagerTests(unittest.TestCase):
+class ModuleToLoadTests(unittest.TestCase):
 
     module_name = 'ModuleManagerTest_module'
 
@@ -19,7 +19,7 @@
         # Test a new module is created, inserted into sys.modules, has
         # __initializing__ set to True after entering the context manager,
         # and __initializing__ set to False after exiting.
-        with util.ModuleManager(self.module_name) as module:
+        with util.module_to_load(self.module_name) as module:
             self.assertIn(self.module_name, sys.modules)
             self.assertIs(sys.modules[self.module_name], module)
             self.assertTrue(module.__initializing__)
@@ -28,19 +28,19 @@
     def test_new_module_failed(self):
         # Test the module is removed from sys.modules.
         try:
-            with util.ModuleManager(self.module_name) as module:
+            with util.module_to_load(self.module_name) as module:
                 self.assertIn(self.module_name, sys.modules)
                 raise exception
         except Exception:
             self.assertNotIn(self.module_name, sys.modules)
         else:
-            self.fail('importlib.util.ModuleManager swallowed an exception')
+            self.fail('importlib.util.module_to_load swallowed an exception')
 
     def test_reload(self):
         # Test that the same module is in sys.modules.
         created_module = imp.new_module(self.module_name)
         sys.modules[self.module_name] = created_module
-        with util.ModuleManager(self.module_name) as module:
+        with util.module_to_load(self.module_name) as module:
             self.assertIs(module, created_module)
 
     def test_reload_failed(self):
@@ -48,12 +48,12 @@
         created_module = imp.new_module(self.module_name)
         sys.modules[self.module_name] = created_module
         try:
-            with util.ModuleManager(self.module_name) as module:
+            with util.module_to_load(self.module_name) as module:
                 raise Exception
         except Exception:
             self.assertIn(self.module_name, sys.modules)
         else:
-            self.fail('importlib.util.ModuleManager swallowed an exception')
+            self.fail('importlib.util.module_to_load swallowed an exception')
 
 
 class ModuleForLoaderTests(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -103,8 +103,8 @@
 - Issue #18070: Have importlib.util.module_for_loader() set attributes
   unconditionally in order to properly support reloading.
 
-- Add importlib.util.ModuleManager as a context manager to provide the proper
-  module object to load.
+- Add importlib.util.module_to_load to return a context manager to provide the
+  proper module object to load.
 
 - Issue #18025: Fixed a segfault in io.BufferedIOBase.readinto() when raw
   stream's read() returns more bytes than requested.
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