From 6411aa5dd429acf4cd8f41c8e798d3df364d469a Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 6 Feb 2009 00:07:49 +0000 Subject: [PATCH] Finish implementing tests for importlib.machinery.PathFinder by testing that implicit hooks are handled properly. --- Lib/importlib/NOTES | 22 ++++++++++++---------- Lib/importlib/test/import_/test_path.py | 23 +++++++++++++++++++---- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/Lib/importlib/NOTES b/Lib/importlib/NOTES index 97db64233bb..538e8740eff 100644 --- a/Lib/importlib/NOTES +++ b/Lib/importlib/NOTES @@ -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__ diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py index 6bace12036c..b4ae779af06 100644 --- a/Lib/importlib/test/import_/test_path.py +++ b/Lib/importlib/test/import_/test_path.py @@ -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 = '' + 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():