]> granicus.if.org Git - python/commitdiff
Finish implementing tests for importlib.machinery.PathFinder by testing that
authorBrett Cannon <bcannon@gmail.com>
Fri, 6 Feb 2009 00:07:49 +0000 (00:07 +0000)
committerBrett Cannon <bcannon@gmail.com>
Fri, 6 Feb 2009 00:07:49 +0000 (00:07 +0000)
implicit hooks are handled properly.

Lib/importlib/NOTES
Lib/importlib/test/import_/test_path.py

index 97db64233bb37e5860015e9e71b81ebcf186b169..538e8740eff603921c69388b1de7456e71bbfefb 100644 (file)
@@ -9,11 +9,15 @@ to do
 
 * Create meta_path importer for sys.path.
 
-    + Create hook.
-    + Write tests.
-    + Rewrite Import to use the hook.
     + Document.
 
+* Refactor __import__.
+
+    + Create a greatest common denominator function for __import__/import_module
+      that takes in an absolute module name and performs the import.
+    + Use GCD import for __import__.
+    + Use GCD import for import_module.
+
 * Implement PEP 302 protocol for loaders (should just be a matter of testing).
 
     + Built-in.
@@ -21,7 +25,7 @@ to do
     + Extension.
     + Source/bytecode.
 
-* Public API to expose (w/ docs!)
+* Public API left to expose (w/ docs!)
 
   + abc
 
@@ -33,6 +37,8 @@ to do
 
         * load_module
 
+      - (?) Importer(Finder, Loader)
+
       - ResourceLoader(Loader)
 
         * get_data
@@ -58,8 +64,6 @@ to do
   + machinery
 
       - (?) Chained path hook/finder
-      - BuiltinImporter
-      - FrozenImporter
       - (?) FileFinder
       - Extensions importers
 
@@ -75,10 +79,8 @@ to do
 
 * OPTIMIZE!
 
-  + Fast path common cases.
-
-    - Absolute name from sys.path.
-    - Relative name from sys.path.
+  + Fast path absolute name.
+  + Fast path pulling from sys.modules.
 
 * Bootstrap importlib as implementation of builtins.__import__
 
index 6bace12036c42464474130d3152c266a545661b1..b4ae779af065440e55d05c4aea376118d0079b77 100644 (file)
@@ -2,9 +2,10 @@ from importlib import machinery
 from .. import util
 from . import util as import_util
 from contextlib import nested
-from imp import new_module
+import imp
 import os
 import sys
+from test import support
 from types import MethodType
 import unittest
 
@@ -143,7 +144,7 @@ class __path__Tests(BaseTests):
         self.run_test(self.hooks_order_test, location, [location])
 
     def test_path_argument(self):
-        module = new_module('pkg')
+        module = imp.new_module('pkg')
         module.__path__ = ['random __path__']
         name = 'pkg.whatever'
         sys.modules['pkg'] = module
@@ -221,8 +222,22 @@ class FinderTests(unittest.TestCase):
 
     def test_implicit_hooks(self):
         # Test that the implicit path hooks are used.
-        # TODO(brett.cannon) implement
-        pass
+        existing_path = os.path.dirname(support.TESTFN)
+        bad_path = '<path>'
+        module = '<module>'
+        assert not os.path.exists(bad_path)
+        with util.import_state():
+            nothing = machinery.PathFinder.find_module(module,
+                                                       path=[existing_path])
+            self.assert_(nothing is None)
+            self.assert_(existing_path in sys.path_importer_cache)
+            self.assert_(not isinstance(sys.path_importer_cache[existing_path],
+                                        imp.NullImporter))
+            nothing = machinery.PathFinder.find_module(module, path=[bad_path])
+            self.assert_(nothing is None)
+            self.assert_(bad_path in sys.path_importer_cache)
+            self.assert_(isinstance(sys.path_importer_cache[bad_path],
+                                    imp.NullImporter))
 
 
 def test_main():